在时间单位是任意的情况下,如何根据每单位时间的时间戳列来统计MySQL表中的记录数?
具体地说,我想要计算在给定的时间间隔内,有多少记录的时间戳落入15分钟的存储桶中。我了解如何使用MySQL日期函数在1秒、1分钟、1小时、1天等的存储桶中执行此操作,例如
SELECT YEAR(datefield) Y, MONTH(datefield) M, DAY(datefield) D, COUNT(*) Cnt FROM mytable GROUP BY YEAR(datefield), MONTH(datefield), DAY(datefield)但是我怎么能按15分钟的时段分组呢?
发布于 2010-04-06 01:36:19
GROUP BY
YEAR(datefield),
MONTH(datefield),
DAY(datefield),
HOUR(datefield),
FLOOR(MINUTE(datefield)/15)你也可以直接说:
SELECT FLOOR(UNIX_TIMESTAMP(datefield)/900) AS t, COUNT(*) AS cnt
FROM mytable
GROUP BY t应用程序负责将每15分钟的时间戳格式化为可读的y/m/d/h/m。(如果您需要在一个疯狂的、不按一刻钟对齐的时区中使用本地时间,则需要一个hack偏移量。)
发布于 2010-04-06 01:31:27
如何获得(小时( DateField )* 60 +分钟( DateField )) / YourInterval的整数。
这样,无论你的时间间隔是多少,通过包括小时* 60分钟,它将在给定的一天中按顺序保持它,并且你不会只处理每小时15分钟,而是每小时15分钟……将该列添加到group by子句中,您可以通过其序号位置来执行此操作。
发布于 2010-04-06 01:51:32
让您思考一下,这里有一个FLOOR(MINUTE(datefield)/15)解决方案的替代方案:
GROUP BY CASE
WHEN MINUTES(datetime) BETWEEN 0 AND 14 THEN 0
WHEN MINUTES(datetime) BETWEEN 15 AND 29 THEN 1
WHEN MINUTES(datetime) BETWEEN 30 AND 44 THEN 2
WHEN MINUTES(datetime) BETWEEN 45 AND 59 THEN 3
ENDhttps://stackoverflow.com/questions/2579803
复制相似问题