PostgreSQL usa el valor de la fila anterior si falta
Tengo una consulta siguiente:
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 da el siguiente 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
tieneid
, created
y algunas otras columnas, pero solo esas son relevantes aquí. La consulta anterior me daid
del último evento generado por dadotrunc
período de tiempo (gracias aDISTINCT ON
Obtengo una buena agregación por periodo).
Ahora, esta consulta cedeNULL
Si no ocurrieron eventos en un período de tiempo dado. Me gustaría que devolviera el anterior disponible.id
, incluso si es de diferente período de tiempo. Es decir.:
"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
Estoy seguro de que me estoy perdiendo alguna forma fácil de lograr esto. ¿Algún consejo?