小编典典

将记录按小时或按天分组,并在mysql中用零或空值填充空白

sql

我写了一个查询,每小时对记录进行计数:

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


阅读 213

收藏
2021-03-23

共1个答案

小编典典

我创建了一个名为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

如果您有更好的主意,我很想知道;)

2021-03-23