我有一个非常简单的MySQL表SQL查询结果分组到每小时桶
Name | Time | Count
James | 11:00 | 10
Simon | 11:00 | 5
James | 11:30 | 4
Oliver| 11:30 | 2
James | 12:00 | 1
etc.
我想创建一个MySQL查询其求和计算每个人并输出最后1个小时值,最后3小时值,最后6小时值,最后12小时值和最后24小时值。
例如如果现在的时间是12:59上表将输出:
Name | Last-1 | Last-3 | Last-6
James | 1 | 15 | 15
Simon | 0 | 5 | 5
Oliver| 0 | 2 | 2
是否有可能做到这一点在单个查询?到目前为止,我有:
SELECT name, HOUR(NOW()) - HOUR(time) AS lasthours, SUM(count) AS c
FROM table
GROUP BY name, lasthours
HAVING lasthours =0
ORDER BY c DESC
哪给了我过去一小时,但如何获得额外的列?
任何帮助非常感谢。
编辑:
接受的答案需要稍微调整就出来了,如下所示:
SELECT name ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=0, count , 0)) AS `Last hour` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=3, count , 0)) AS `Last 3 hours` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=6, count , 0)) AS `Last 6 hours` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=12, count , 0)) AS `Last 12 hours` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=24, count , 0)) AS `Last 24 hours` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=48, count , 0)) AS `Last 2 days` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=72, count , 0)) AS `Last 3 days` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=96, count , 0)) AS `Last 4 days` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=120, count , 0)) AS `Last 5 days` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=144, count , 0)) AS `Last 6 days` ,
SUM(IF(HOUR(TIMEDIFF(NOW() , time)) <=168, count , 0)) AS `Last week`
FROM table
GROUP BY name
ORDER BY `Last hour` DESC
这是优秀的,谢谢。虽然我不得不将CURTIME()更改为NOW() – user1491032