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
, foo
y bar
que representa una visión unificada de los valores más recientes. En otras palabras, si está foo
contenido:
ts | foo
--------
1 | A
7 | B
y bar
contení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 lag
funció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.
foo
ybar
estrictamente ascendente en el tiempo o en el caso de prueba engañosa a este respecto?