Diberikan dua tabel:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Saya ingin menulis query yang kembali nilai-nilai untuk ts
, foo
dan bar
yang mewakili pandangan terpadu yang paling nilai-nilai baru-baru ini. Dengan kata lain, jika foo
berisi:
ts | foo
--------
1 | A
7 | B
dan bar
berisi:
ts | bar
--------
3 | C
5 | D
9 | E
Saya ingin kueri yang mengembalikan:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
Jika kedua tabel memiliki acara secara bersamaan, urutannya tidak menjadi masalah.
Saya telah berhasil membuat struktur yang dibutuhkan dengan menggunakan nilai union all dan dummy:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
yang akan memberi saya garis waktu linier dari nilai-nilai baru, tapi saya tidak cukup bisa mengetahui bagaimana mengisi nilai nol berdasarkan baris sebelumnya. Saya sudah mencoba lag
fungsi jendela, tetapi AFAICT hanya akan melihat baris sebelumnya, tidak secara rekursif mundur. Saya telah melihat CTE rekursif, tapi saya tidak yakin bagaimana mengatur kondisi awal dan terminasi.
foo
danbar
benar - benar naik dari waktu ke waktu atau apakah test case menyesatkan dalam hal ini?