我有一个表格,用于存储一些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作为例子。
答案 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)
这将选择相应分钟的计数和相应的完整时间戳。这可能或可能不适合您的情况,因为它不会直接显示分钟,而只是时间戳,包括在该分钟内的 。
从该时间戳开始,您当然可以轻松计算分钟,但其他答案已经为您提供了分钟而不需要进一步努力,因此它们可能会更适合您的情况。
另一方面,我认为(但不确定并且目前无法测试)我的解决方案可能会非常快。