简体   繁体   English

MySQL连续几天返回错误值

[英]Mysql consecutive days returning wrong value

I am trying to do a consecutive days count in mysql from a timestamp column. 我正在尝试从时间戳列中的mysql中进行连续计数。 I thought I had this problem solved once long ago - but for some strange reason, it is returning the wrong value. 我以为我早就解决了这个问题-但由于某些奇怪的原因,它返回了错误的值。

It should return a single column containing a username, the lowest date with the highest time value in the consecutive date list, and the largest number of consecutive days. 它应返回一个包含用户名,连续日期列表中时间值最高的最低日期和连续天数最多的单列。

It all works except the largest number of consecutive days is not always correct. 除最大连续天数之外,其他所有方法并不总是正确的。

SELECT username, day1, count(distinct date) days from (
    SELECT t1.username, t1.date, max(tmp.date) day1 from sites_surfed t1
        LEFT JOIN (
            SELECT tmp1.date from sites_surfed tmp1
            LEFT JOIN sites_surfed tmp2
                ON DATE_FORMAT(tmp1.date,'%d/%m/%Y') = DATE_FORMAT(tmp2.date,'%d/%m/%Y')+1
                AND tmp1.username = tmp2.username where (tmp1.username = 'viraladmin') 
                AND (tmp2.date is null))tmp on (t1.date >= tmp.date) where t1.username = 'viraladmin'
                GROUP BY t1.date
   ) fin  
   WEHERE username = 'viraladmin'
       GROUP BY day1 having count(distinct date) > 1 order by days

The below jsfiddle shows an example of it returning 3 for the total amount of consecutive days when it should only be return 2 as only two unique dates are in the table list 下面的jsfiddle显示了一个示例,该示例在表列表中仅两个唯一日期的情况下,仅应返回2时,其连续几天的返回值为3

http://sqlfiddle.com/#!9/85f6d6/4 http://sqlfiddle.com/#!9/85f6d6/4

What is going on here and how do I fix this? 这是怎么回事,我该如何解决?

I've changed 我变了

GROUP BY t1.date

to

GROUP BY DATE_FORMAT(t1.date,'%d/%m/%Y')

This seems to be working. 这似乎正在工作。

SELECT username, day1, count(distinct date) days from (
    SELECT t1.username, t1.date, max(tmp.date) day1 from sites_surfed t1
        LEFT JOIN (
            SELECT tmp1.date from sites_surfed tmp1
            LEFT JOIN sites_surfed tmp2
                ON DATE_FORMAT(tmp1.date,'%d/%m/%Y') = DATE_FORMAT(tmp2.date,'%d/%m/%Y')+1
                AND tmp1.username = tmp2.username where (tmp1.username = 'viraladmin') 
                AND (tmp2.date is null))tmp on (t1.date >= tmp.date) where t1.username = 'viraladmin'
                GROUP BY DATE_FORMAT(t1.date,'%d/%m/%Y')
   ) fin  
   WHERE username = 'viraladmin'
       GROUP BY day1 having count(distinct date) > 1 order by days

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM