我编写了一个小的PostgreSQL查询,它可以帮助我在两个特定日期内每小时每小时执行一次作业总数-e.g. 2012年2月2日至2012年3月3日期间执行的所有工作从2月2日开始的小时开始,以3月3日的小时结束,我注意到此查询不打印0计数的行 - 在该时间间隔内没有执行任务,例如在2012年2月21日下午5点到6点之间。如何使这也返回0计数的结果(行)?代码如下:
SELECT date_trunc('hour', executiontime), count(executiontime)
FROM mytable
WHERE executiontime BETWEEN '2011-2-2 0:00:00' AND '2012-3-2 5:00:00'
GROUP BY date_trunc('hour', executiontime)
ORDER BY date_trunc('hour', executiontime) ASC;
提前致谢。
答案 0 :(得分:1)
-- CTE to the rescue!!!
WITH cal AS (
SELECT generate_series('2012-02-02 00:00:00'::timestamp , '2012-03-02 05:00:00'::timestamp , '1 hour'::interval) AS stamp
)
, qqq AS (
SELECT date_trunc('hour', executiontime) AS stamp
, count(*) AS zcount
FROM mytable
GROUP BY date_trunc('hour', executiontime)
)
SELECT cal.stamp
, COALESCE (qqq.zcount, 0) AS zcount
FROM cal
LEFT JOIN qqq ON cal.stamp = qqq.stamp
ORDER BY stamp ASC
;
答案 1 :(得分:0)
Look this。想法是在此期间生成包含日期的数组或表,并与作业执行表连接。