Biorąc pod uwagę dwie tabele:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Chciałbym napisać kwerendę, która zwraca wartości ts
, foo
i bar
który reprezentuje jednolity obraz najnowszych wartości. Innymi słowy, jeśli foo
zawiera:
ts | foo
--------
1 | A
7 | B
i bar
zawierał:
ts | bar
--------
3 | C
5 | D
9 | E
Chcę kwerendy, która zwraca:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
Jeśli obie tabele mają jednocześnie zdarzenie, kolejność nie ma znaczenia.
Udało mi się stworzyć potrzebną strukturę, używając sumy wszystkich i wartości zastępczych:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
co da mi liniową oś czasu nowych wartości, ale nie jestem w stanie wypracować sposobu zapełniania wartości zerowych na podstawie poprzednich wierszy. Próbowałem lag
funkcji okna, ale AFAICT będzie patrzeć tylko na poprzedni wiersz, a nie rekurencyjnie do tyłu. Patrzyłem na rekurencyjne CTE, ale nie jestem pewien, jak skonfigurować warunki początkowe i końcowe.
foo
ibar
ściśle rosną w miarę upływu czasu, czy też przypadek testowy wprowadza w błąd pod tym względem?