2015-10-20 53 views
0

我正在尝试为所有项目计算连续的日期。我发现怎么算连续几天just for one item,样本数据为SQL中的所有项目计算连续的日期

bob 2014-08-10 00:35:22 
sue 2014-08-10 00:35:22 
bob 2014-08-11 00:35:22 
mike 2014-08-11 00:35:22 
bob 2014-08-12 00:35:22 
mike 2014-08-12 00:35:22 

会给我造成了鲍勃这样的:

date_created   | streak| 
2014-08-10 00:35:22 |  3| 

但是我需要得到它像这样所有用户:

date_created   | streak|username 
2014-08-10 00:35:22 |  3|  Bob 
2014-08-11 00:35:22 |  2|  Mike 

我一直在试图从this response修改SQL,但我只是无法得到它的工作。我会很感激任何建议。

回答

1

你可以做的一件事就是在连续的日子里自我加入表格并计数。注意我加一计数,因为它不会算上第一天

SELECT MIN(e.date_created) as date_created, e.username, COUNT(e.username) + 1 AS streak 
FROM example e 
LEFT JOIN example ee 
    ON e.username = ee.username 
AND DATE(e.date_created) = DATE(DATE_ADD(ee.date_created, INTERVAL -1 DAY)) 
WHERE ee.username IS NOT NULL 
GROUP BY e.username; 

Sql Fiddle

+0

谢谢您的答复,我测试过它,可惜的是,它并不因为它应该工作。如果你添加值('bob','2014-08-05 00:35:22'), ('bob','2014-08-06 00:35:22'),它会向Bob显示date_created“八月,05 2014 00:35:22“和连胜4,这是不正确的,因为这是不连续的(鲍勃的日子是05,06,10,11,12) – DropDropped

+0

@DropDropped这个表有一个唯一的ID吗? –

+0

我的表有一个唯一的ID – DropDropped