MySql提取计数器按日期分组

时间:2017-09-27 14:00:47

标签: mysql

我有一个表格,用于存储一些API请求。每个请求都有一个状态代码和一个created_on时间戳(不是unix时间戳),表示创建时间。

在我的应用程序中,我想构建一个图表,并向用户显示每分钟执行的请求数量。

我试图计算每分钟的请求数,并将这些请求的日期提取到当然,但忽略秒数。

如果插入时间戳2017-09-27 00:33:44并且在分钟33中存储了许多其他请求,但是在不同的秒数内我想忽略这些秒并获得此结果:

2017-09-27 00:32:00` : 1 (requests) 2017-09-27 00:33:00` : 4 (requests)

有没有办法做到这一点,或者我应该将created_on字段分解为年,月,日,时,分,然后按那些分组?

我准备了一个sqlfiddle作为例子。

3 个答案:

答案 0 :(得分:0)

你可以尝试:

SELECT CONCAT(SUBSTRING(created_on, 1, 16), ':00'), COUNT(*)
FROM table
GROUP BY 1 ORDER BY 1;

答案 1 :(得分:0)

E.g。用你的小提琴:

\d

答案 2 :(得分:0)

MySQL不仅可以直接按数据分组,还可以按数据计算的值进行分组。这立即产生了强大而优雅的解决方案:

SELECT timestamp, COUNT(*)
FROM table
GROUP BY YEAR(timestamp),
         MONTH(timestamp),
         DAY(timestamp),
         HOUR(timestamp),
         MINUTE(timestamp)

这将选择相应分钟的计数和相应的完整时间戳。这可能或可能不适合您的情况,因为它不会直接显示分钟,而只是时间戳,包括在该分钟内的

从该时间戳开始,您当然可以轻松计算分钟,但其他答案已经为您提供了分钟而不需要进一步努力,因此它们可能会更适合您的情况。

另一方面,我认为(但不确定并且目前无法测试)我的解决方案可能会非常快。