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

例如如果现在时间是 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

最佳答案

SELECT   `name`,
         SUM(IF(HOUR(TIMEDIFF(CURTIME(), `Time`)) <= 1, `Count`, 0)) AS `Last-1`,
         SUM(IF(HOUR(TIMEDIFF(CURTIME(), `Time`)) <= 3, `Count`, 0)) AS `Last-3`,
         SUM(IF(HOUR(TIMEDIFF(CURTIME(), `Time`)) <= 6, `Count`, 0)) AS `Last-6`
FROM     `table`
GROUP BY `name`

查看 sqlfiddle .

关于mysql - SQL 查询将结果分组到每小时的存储桶中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11261060/

相关文章:

mysql - 删除给定列表中除行号以外的所有其他行

java - 如何仅使用 java 原始套接字验证 DB 远程服务器是否正在运行 [Telnet]

php - jQuery 自动填充表单无法工作

sql - 避免列中的重复值

MYSQL:从多个表返回多个计数

MySQL Group By 和 Order By 一起使用

Mysql 查询优化、EXPLAIN 和执行缓慢

java - 在android SQLite中删除行

sql - 最小传输Sql查询

sql - “MOD”不是可识别的内置函数名称