我写了一个查询,每小时对记录进行计数:
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');
我也需要用0或null来填补他们的空白。任何帮助,我们真的很感激。
注意:在oracle中使用此问题有一个答案,CONNECT BY但是我需要Mysql中的答案,因为Mysql不支持CONNECT BY。
CONNECT BY
我创建了一个名为TBL_NUMBERS的表
CREATE TABLE `TBL_NUMBER` (`n` int(11) NOT NULL)
并插入从1到1000的记录。现在,我可以使用此查询生成任何类型的日期范围:
SELECT '2012-06-21' + INTERVAL n-1 [DAY | HOUR | MINUTE] or as dateRange FROM TBL_NUMBER WHERE '2012-06-21' + INTERVAL n-1 [DAY | HOUR | MINUTE] <= '2012-06-23';
然后,我可以将此表与我的结果结合起来以填补日期空白。如果我需要超过1000个日期范围,我可以在中插入更多记录TBL_NUMBER
TBL_NUMBER
如果您有更好的主意,我很想知道;)