Dadas dos tablas:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Me gustaría escribir una consulta que devuelve los valores para ts, fooy barque representa una visión unificada de los valores más recientes. En otras palabras, si está foocontenido:
ts | foo
--------
1 | A
7 | B
y barcontenía:
ts | bar
--------
3 | C
5 | D
9 | E
Quiero una consulta que devuelva:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
Si ambas tablas tienen un evento al mismo tiempo, el orden no importa.
He podido crear la estructura necesaria usando union all y valores ficticios:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
lo que me dará una línea de tiempo lineal de nuevos valores, pero no soy capaz de resolver cómo llenar los valores nulos en función de las filas anteriores. He probado la lagfunción de ventana, pero AFAICT sólo se verá en la fila anterior, no recursiva hacia atrás. He examinado los CTE recursivos, pero no estoy muy seguro de cómo configurar las condiciones de inicio y finalización.
fooybarestrictamente ascendente en el tiempo o en el caso de prueba engañosa a este respecto?