如何计算每半小时的消息数量?

Pr0*_*0no 2 mysql sql time

请考虑下表:

msg_id  _time
-------------
1       13:32
2       13:56
3       14:05
4       15:00
5       15:17
6       15:28
7       16:40
Run Code Online (Sandbox Code Playgroud)

我目前正在汇总每小时的邮件数量,如下所示:

SELECT HOUR(_time) AS hour, COUNT(msg_id) AS cnt FROM messages GROUP BY hour 
ORDER BY hour
Run Code Online (Sandbox Code Playgroud)

这导致结果集如下:

hour  cnt
---------
13    2
14    1
15    3
16    1
Run Code Online (Sandbox Code Playgroud)

然而,我想要的是每小时的计数:

hour   cnt
----------
13:30  2
14:00  1
14:30  0
15:00  3
15:30  0
16:00  0
16:30  1
Run Code Online (Sandbox Code Playgroud)

什么是查询使这成为可能?如果有必要的话,我想我可以用半小时(00:00,00:30,01:00,01:30,...... 23:23,2:30)来制作一张桌子,但也不愿意.(我仍然不知道如何使用该表).

任何帮助是极大的赞赏 :-)

Ric*_*uza 5

您可以使用 case when

SELECT COUNT(msg_id) AS cnt, CONCAT(CAST(HOUR(_TIME) AS CHAR(2)), ':', (CASE WHEN MINUTE(_time) < 30 THEN '00' ELSE '30' END)) AS hour
FROM messages
GROUP BY CONCAT(CAST(HOUR(_TIME) AS CHAR(2)), ':', (CASE WHEN MINUTE(_time) < 30 THEN '00' ELSE '30' END))
ORDER BY hour
Run Code Online (Sandbox Code Playgroud)