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, fooe barque representa uma visão unificada dos valores mais recentes. Em outras palavras, se foocontido:
ts | foo
--------
1 | A
7 | B
e barcontinha:
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 lagfunçã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.
fooebarestritamente ascendente ao longo do tempo ou é o caso de teste enganosa a este respeito?