Hei*_*deh 5 mysql sql oracle group-by hour
我写了一个查询,每小时查询记录:
select TO_CHAR(copied_timestamp, 'YYYY-MM-DD HH24'),count(*) from req group by
TO_CHAR(copied_timestamp, 'YYYY-MM-DD HH24');
Run Code Online (Sandbox Code Playgroud)
结果是:
2012-02-22 13 2280
2012-02-22 15 1250
2012-02-22 16 1245
2012-02-22 19 1258
Run Code Online (Sandbox Code Playgroud)
但是我需要这样的结果:
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
Run Code Online (Sandbox Code Playgroud)
我也有按天和月分组的这些查询!
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');
Run Code Online (Sandbox Code Playgroud)
我也需要用零或空值填充它们的间隙。任何帮助都非常感谢。
注意:在oracle中使用此问题有一个答案,CONNECT BY但是我需要Mysql中的答案,因为Mysql不支持CONNECT BY。
链接在这里
我创建了一个名为 TBL_NUMBERS 的表
CREATE TABLE `TBL_NUMBER` (`n` int(11) NOT NULL)
Run Code Online (Sandbox Code Playgroud)
并插入从 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';
Run Code Online (Sandbox Code Playgroud)
然后我可以将该表与我的结果连接起来以填补日期空白。如果我需要超过 1000 个日期范围,我可以在其中插入更多记录TBL_NUMBER
如果您有更好的想法,我很想知道;)