Dadas duas tabelas:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Eu gostaria de escrever uma consulta que retorna valores para ts
, foo
e bar
que representa uma visão unificada dos valores mais recentes. Em outras palavras, se foo
contido:
ts | foo
--------
1 | A
7 | B
e bar
continha:
ts | bar
--------
3 | C
5 | D
9 | E
Eu quero uma consulta que retorne:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
Se as duas tabelas tiverem um evento ao mesmo tempo, o pedido não importará.
Consegui criar a estrutura necessária usando os valores union all e dummy:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
que fornecerá uma linha do tempo linear de novos valores, mas não sou capaz de descobrir como preencher os valores nulos com base nas linhas anteriores. Eu tentei a lag
função de janela, mas AFAICT só vai olhar para a linha anterior, não recursivamente para trás. Eu observei CTEs recursivas, mas não sei ao certo como configurar as condições de início e término.
foo
ebar
estritamente ascendente ao longo do tempo ou é o caso de teste enganosa a este respeito?