我已经编写了一个小的PostgreSQL查询,它可以帮助我在两个特定的日期-e.g内每天每小时间隔执行的作业总数。在2012年2月2日和2012年3月3日之间执行的所有作业从2月2日给定的小时开始,到3月3日给定的小时结束-我注意到此查询不会打印在该时间间隔内执行的计数为0的行-no作业,例如在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;提前谢谢。
发布于 2012-08-01 22:42:40
-- 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-01 22:28:09
Look this。其思想是生成包含该时间段日期的数组或表,并与作业执行表连接。
https://stackoverflow.com/questions/11761171
复制相似问题