我有以下查询:
WITH t as (
SELECT date_trunc('hour', time_series) as trunc
FROM generate_series('2013-02-27 22:00'::timestamp, '2013-02-28 2:00',
'1 hour') as time_series
GROUP BY trunc
ORDER BY trunc
)
SELECT DISTINCT ON(trunc) trunc, id
FROM t
LEFT JOIN (
SELECT id, created, date_trunc('hour', created) as trunc_u
FROM event
ORDER BY created DESC
) u
ON trunc = trunc_u
产生以下结果:
"2013-02-27 22:00:00";
"2013-02-27 23:00:00";2
"2013-02-28 00:00:00";5
"2013-02-28 01:00:00";
"2013-02-28 02:00:00";
表event
有id
,created
和其他一些列,但这里只有那些是相关的。上面的查询为我提供了id
每个给定时间段生成的最后一个事件trunc
(感谢每个时间段DISTINCT ON
我得到了一个很好的聚合)。
NULL
现在,如果在给定的时间段内没有发生任何事件,则此查询会产生。我希望它返回以前的可用id
,即使它来自不同的时间段。IE:
"2013-02-27 22:00:00";0
"2013-02-27 23:00:00";2
"2013-02-28 00:00:00";5
"2013-02-28 01:00:00";5
"2013-02-28 02:00:00";5
我确信我错过了一些简单的方法来实现这一点。有什么建议吗?