如何使此查询也返回0计数值的行?

时间:2012-08-01 14:12:49

标签: sql postgresql

我编写了一个小的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;

提前致谢。

2 个答案:

答案 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。想法是在此期间生成包含日期的数组或表,并与作业执行表连接。