Mysql 如何计算每半小时的邮件数?
考虑下表:Mysql 如何计算每半小时的邮件数?,mysql,sql,time,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 我目前正在汇总每小时的邮件数,如下所示: SELECT HOUR(_time) AS hour, COUNT(msg_id) AS cnt FROM messages GROUP BY hour ORDER BY hour hou
msg_id _time
-------------
1 13:32
2 13:56
3 14:05
4 15:00
5 15:17
6 15:28
7 16:40
我目前正在汇总每小时的邮件数,如下所示:
SELECT HOUR(_time) AS hour, COUNT(msg_id) AS cnt FROM messages GROUP BY hour
ORDER BY hour
hour cnt
---------
13 2
14 1
15 3
16 1
这将产生如下结果集:
SELECT HOUR(_time) AS hour, COUNT(msg_id) AS cnt FROM messages GROUP BY hour
ORDER BY hour
hour cnt
---------
13 2
14 1
15 3
16 1
然而,我想要的是每半小时的计数:
hour cnt
----------
13:30 2
14:00 1
14:30 0
15:00 3
15:30 0
16:00 0
16:30 1
是什么让这成为可能?如果必要的话,我想我可以买一张半小时的桌子(00:00,00:30,01:00,01:30,…23:00,23:30),但我不太喜欢。(我也不知道如何使用那张桌子)
非常感谢您的帮助:-)
我想我可以买一张有半小时时间的桌子(00:00,00:30,01:00,01:30,…23:00,23:30),但我不太喜欢
是的,如果您被迫使用MySQL,这是正确的解决方案。用另一种方式做是可能的,但可能会变得混乱,速度会变慢
(我也不知道如何使用那张桌子)
使用左连接:
SELECT
halfhours.start AS hour,
COUNT(*) AS count
FROM halfhours
LEFT JOIN messages
ON messages._time >= halfhours.start AND messages._time < halfhours.end
GROUP BY halfhours.start
选择
半小时。从一小时开始,
计数(*)作为计数
从半小时开始
左连接消息
在消息上。\u time>=halfhours.start和消息。\u time
尝试按以下方式分组:
group by hour(_time), floor(minute(_time)/30)
当
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
选择COUNT(msg_id)作为cnt,CONCAT(CAST(HOUR(_TIME)作为CHAR(2)),':',(CASE WHEN MINUTE(_TIME)<30然后选择'00'否则选择'30'结束)作为小时
来自消息
按CONCAT分组(CAST(小时(_时间)为字符(2)),“:”,(当分钟(_时间)<30时,则为“00”,否则为“30”结束)
按小时订购
为什么该列仍然称为“小时”?也许“时间”更合适?你可以用分钟除以30,再加上小时,再按这个值分组。你可能需要将结果转换为int,我不确定。嘿!这解决了你的问题吗?如果是,请将解决问题的答案标记为帮助他人的正确答案。如果没有,请给我们反馈。Thakns!为了在结果集中获得10:30、11:00、11:30等,我使用了rcdmk查询的一部分:SELECT CONCAT(CAST(HOUR(nyse_时间)AS CHAR(2)),':',(CASE WHEN MINUTE(nyse_时间))和谢谢!我将您和aleroot的查询组合在一起,因为您的查询在结果集中显示了半小时10:30、11:00、11:30等等,但排序不正确。输出结果是:0:00、0:30、10:00、10:30
,我不太明白如何解决这个问题。所以我将选择CONCAT(CAST(HOUR)(纽约证交所时间)作为字符(2) ),“:”,(CASE WHEN MINUTE(纽约证交所时间)很好,你做到了。为了更好地排序,你必须按小时(纽约证交所时间)ASC,分钟(纽约证交所时间)ASC排序,谢谢!这是我的想法,但看看其他建议,在MySQL中没有帮助表是可能的:-)