1

我编写了一个小型 PostgreSQL 查询,它可以帮助我在两个特定日期内每天每小时间隔执行的作业总量 - 例如,从 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;

提前致谢。

4

2 回答 2

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
        ;
于 2012-08-01T14:42:40.350 回答
0

看这个。想法是生成包含此期间日期的数组或表,并与作业执行表连接。

于 2012-08-01T14:28:08.860 回答