Dato due tabelle:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Vorrei scrivere una domanda che ritorna per valori ts
, foo
e bar
che rappresenta una visione unificata dei valori più recenti. In altre parole, se foo
contenuto:
ts | foo
--------
1 | A
7 | B
e bar
conteneva:
ts | bar
--------
3 | C
5 | D
9 | E
Voglio una query che ritorni:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
Se entrambe le tabelle hanno un evento contemporaneamente, l'ordine non ha importanza.
Sono stato in grado di creare la struttura necessaria usando unione tutti e valori fittizi:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
che mi darà una linea temporale lineare di nuovi valori, ma non sono del tutto in grado di capire come popolare i valori null in base alle righe precedenti. Ho provato la lag
funzione finestra, ma AFAICT guarderà solo alla riga precedente, non ricorsivamente all'indietro. Ho esaminato i CTE ricorsivi, ma non sono sicuro di come impostare le condizioni di inizio e fine.
foo
ebar
rigorosamente ascendente nel tempo o è il caso di test fuorvianti a questo proposito?