mysql - 如何通过一次查询获取上一小时、上一天和上个月的数据?

标签 mysql sql database pdo

我正在记录已发送到我的 API 的查询,如下所示:

id  |  timestamp
----+---------------------
1   |  2015-01-19 18:01:47
2   |  2015-01-19 20:41:37
3   |  2015-01-20 14:15:06
4   |  2015-01-21 13:02:51
5   |  2015-01-23 05:02:12

现在,我需要知道在过去 60 分钟、24 小时和 30 天内进行了多少查询,并将其分组:

HOURLY | DAILY | MONTHLY
-------+-------+--------
0      | 1     | 5

这可以在一次查询中完成吗?

编辑:

我已经使用了这里的建议,并尝试了一些符合逻辑的事情,直到它按照我想要的方式工作。

SELECT SUM(CASE WHEN DATE_SUB(NOW(), interval 1 HOUR) <= `TIMESTAMP` THEN 1 ELSE 0 END) HOURLY,
       SUM(CASE WHEN DATE_SUB(NOW(), interval 1 DAY) <= `TIMESTAMP` THEN 1 ELSE 0 END) DAILY,
       SUM(CASE WHEN DATE_SUB(NOW(), interval 1 MONTH) <= `TIMESTAMP` THEN 1 ELSE 0 END) MONTHLY
FROM `REQUESTS`;

非常感谢您的帮助!

最佳答案

select sum(case when timestamp between now() - interval 1 hour and now() then 1 else 0) hourly,
       sum(case when timestamp between now() - interval 1 day and now() then 1 else 0) daily,
       sum(case when timestamp between now() - interval 1 month and now() then 1 else 0) monthly
from   your_table

编辑...

关于mysql - 如何通过一次查询获取上一小时、上一天和上个月的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28111956/

相关文章:

sql - 批量插入完成后如何获取 'done'消息?

MySQL将具有相同ID的多行合并为一行

javascript - 将数字签名上传到文件夹并提交到数据库

mysql - 删除表中的重复行

mysql - 为什么此 SQL 给出列无法解析错误?

PHP 的explode() 和 SQL 查询问题

mysql - 使用 laravel 更新日期时间列

iOS - 从发布版本中排除测试文件

mysql - 将图片存储在数据库中?

php - 按时间戳对汇总集合进行排序