将MySQL数据分组为任意大小的时间桶

Eri*_* J. 21 mysql time

如何基于每单位时间的时间戳列来计算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)
Run Code Online (Sandbox Code Playgroud)

但我怎么能用15分钟的分组?

bob*_*nce 25

GROUP BY
    YEAR(datefield),
    MONTH(datefield),
    DAY(datefield),
    HOUR(datefield),
    FLOOR(MINUTE(datefield)/15)
Run Code Online (Sandbox Code Playgroud)

你也可以说:

SELECT FLOOR(UNIX_TIMESTAMP(datefield)/900) AS t, COUNT(*) AS cnt
FROM mytable
GROUP BY t
Run Code Online (Sandbox Code Playgroud)

应用程序负责将每个15分钟时间段的时间戳格式化为可读y/m/d/h/m.(如果你需要在一个疯狂的非​​四分之一小时对齐的时区中有当地时间,你需要一个黑客偏移.)