【发布时间】:2012-07-01 17:25:16
【问题描述】:
我写了一个查询,每小时计算记录数:
select TO_CHAR(copied_timestamp, 'YYYY-MM-DD HH24'),count(*) from req group by
TO_CHAR(copied_timestamp, 'YYYY-MM-DD HH24');
结果是:
2012-02-22 13 2280
2012-02-22 15 1250
2012-02-22 16 1245
2012-02-22 19 1258
但我需要这样的结果:
2012-02-22 13 2280
2012-02-22 14 0
2012-02-22 15 1250
2012-02-22 16 1245
2012-02-22 17 0
2012-02-22 18 0
2012-02-22 19 1258
我也有这些按天和月分组的查询!
select TO_CHAR(copied_timestamp, 'YYYY-MM-DD'),count(*) from req
group by TO_CHAR(copied_timestamp, 'YYYY-MM-DD');
select TO_CHAR(copied_timestamp, 'YYYY-MM'),count(*) from req
group by TO_CHAR(copied_timestamp, 'YYYY-MM');
我也需要用零或空来填充它们的空白。 非常感谢任何帮助。
注意:
使用CONNECT BY 在oracle 中有这个问题的答案,但我需要在Mysql 中得到答案,因为Mysql 不支持CONNECT BY。
Here is the link
【问题讨论】:
-
该表是否每天有
24记录,代表一天中的每个小时? -
实际上没有,它可以有更多的记录。每秒可能有 5 条或更多条记录!
-
引用问题中
CONNECT BY和LEVEL的唯一目的是生成行。它是 Oracle 中的一个成语,在 Mysql 中应该有一个等效项,它做同样的事情。也许这会有所帮助:stackoverflow.com/questions/1806484/… -
我看到了你的参考。但我无法生成带有日期的行,作为他们的数据!如果我可以使用您链接中提到的方法生成日期范围,我想我可以处理。
-
如果你在 MySQL 中需要答案,为什么还要坚持
oracle标签? (你把它取下来后放回去。)
标签: mysql sql oracle group-by hour