我正在尝试使用来自此SO问题Check for x consecutive days - given timestamps in database的查询来计算用户提交活动的连续天数,即3天,5天,7天等。
查询是:
SELECT IF(COUNT(1) > 0, 1, 0) AS has_consec
FROM
(
SELECT *
FROM
(
SELECT IF(b.dateAdded IS NULL, @val:=@val+1, @val) AS consec_set
FROM activity a
CROSS JOIN (SELECT @val:=0) var_init
LEFT JOIN activity b ON
a.userID = b.userID AND
a.dateAdded = b.dateAdded + INTERVAL 1 DAY
WHERE a.userID = 1
) a
GROUP BY a.consec_set
HAVING COUNT(1) >= 3
) a
当日期字段不是dateTime时,该代码可以很好地工作,但是如何修改代码以忽略dateTime的时间部分?我尝试使用DATE(dateAdded),但是没有用。
我的数据如下:
userID dateAdded
1 2016-07-01 17:01:56
1 2016-07-02 12:45:49
1 2016-07-03 13:06:27
1 2016-07-04 12:51:10
1 2016-07-05 15:51:10
2 2016-07-06 16:51:10
2 2016-07-07 11:51:10
1 2016-07-08 11:26:38
谢谢
最佳答案
将dateAdded
字段强制转换为Date
。
请尝试一下,让我知道它是否解决了该问题:
SELECT IF(COUNT(1) > 0, 1, 0) AS has_consec
FROM
(
SELECT *
FROM
(
SELECT IF(b.dateAdded IS NULL, @val:=@val+1, @val) AS consec_set
FROM activity a
CROSS JOIN (SELECT @val:=0) var_init
LEFT JOIN activity b ON
a.userID = b.userID AND
DATE(a.dateAdded) = DATE(b.dateAdded) + INTERVAL 1 DAY
WHERE a.userID = 1
) a
GROUP BY a.consec_set
HAVING COUNT(1) >= 3
) a;
注意:仅当它们具有相同的
timestamp
时,使用time (hh:mm:ss)
将返回正确的输出。关于mysql - 从MySQL数据连续获取3天,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38319544/