Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql连续数天返回错误值_Mysql - Fatal编程技术网

Mysql连续数天返回错误值

Mysql连续数天返回错误值,mysql,Mysql,我试图从时间戳列在mysql中连续计算天数。我以为这个问题很久以前就解决过一次——但出于某种奇怪的原因,它返回了错误的值 它应该返回一列,其中包含用户名、连续日期列表中时间值最高的最低日期以及最大连续天数 除了连续的最大天数并不总是正确之外,所有这些都是有效的 SELECT username, day1, count(distinct date) days from ( SELECT t1.username, t1.date, max(tmp.date) day1 from sites_

我试图从时间戳列在mysql中连续计算天数。我以为这个问题很久以前就解决过一次——但出于某种奇怪的原因,它返回了错误的值

它应该返回一列,其中包含用户名、连续日期列表中时间值最高的最低日期以及最大连续天数

除了连续的最大天数并不总是正确之外,所有这些都是有效的

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
下面的jsfiddle显示了一个示例,它返回3表示连续天数的总数,而它只应返回2,因为表列表中只有两个唯一的日期

这里发生了什么,我该如何解决

我变了

GROUP BY t1.date

这似乎奏效了

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

知道为什么需要这样做吗?如果我已经通过联接在tmp1和tmp2上调用了date_格式,为什么它需要在分组上使用额外的date_格式呢?
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