Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 将结果分组到每小时存储桶的SQL查询_Mysql_Sql - Fatal编程技术网

Mysql 将结果分组到每小时存储桶的SQL查询

Mysql 将结果分组到每小时存储桶的SQL查询,mysql,sql,Mysql,Sql,我有一个非常简单的MySQL表 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小时值 e、 g.如果现在的时间是12:59,上表将输出: Name | Last

我有一个非常简单的MySQL表

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小时值

e、 g.如果现在的时间是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
选择名称,
SUM(如果(HOUR(TIMEDIFF(NOW(),time))
选择'name',
总和(如果(小时)(TIMEDIFF(CURTIME(),`Time`))
选择`name`,
SUM(如果(HOUR)(TIMEDIFF(CURTIME(),`Time`))试试这个

Select Name,Sum(Case When Hour(Now)-Hour(Time) <= 1 Then Count Else 0 End) As Last1,
Sum(Case When Hour(Now)-Hour(Time) Between 2 AND 3 Then Count Else 0 End) As Last3,
Sum(Case When Hour(Now)-Hour(Time) Between 4 And 6 Then Count Else 0 End) As Last6
From name
Order By 
选择Name,Sum(当小时(现在)-小时(时间)试试这个

Select Name,Sum(Case When Hour(Now)-Hour(Time) <= 1 Then Count Else 0 End) As Last1,
Sum(Case When Hour(Now)-Hour(Time) Between 2 AND 3 Then Count Else 0 End) As Last3,
Sum(Case When Hour(Now)-Hour(Time) Between 4 And 6 Then Count Else 0 End) As Last6
From name
Order By 

Select Name,Sum(Case When Hour(Now)-Hour(Time)稍作调整就可以了,但我更喜欢下面的解决方案。谢谢!稍作调整就可以了,但我更喜欢下面的解决方案。谢谢!这太棒了,谢谢。尽管我不得不将CURTIME()改为Now()这太棒了,谢谢。虽然我不得不把CURTIME()改成NOW()