PostgreSQL usa valor da linha anterior se estiver faltando
Eu tenho uma consulta a seguir:
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
que produz o seguinte resultado:
"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";
Mesaevent
temid
, created
e algumas outras colunas, mas apenas aquelas são relevantes aqui. A consulta acima me dáid
do último evento gerado por dadotrunc
período de tempo (graças aDISTINCT ON
Eu recebo uma boa agregação por período).
Agora, essa consulta geraNULL
se nenhum evento aconteceu em determinado período de tempo. Eu gostaria que retornasse o anterior disponívelid
, mesmo que seja de um período de tempo diferente. Ou seja:
"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
Tenho certeza de que estou perdendo uma maneira fácil de conseguir isso. Algum conselho?