Дано дві таблиці:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Я хотів би написати запит , який повертає значення ts
, foo
і bar
що являє собою єдине уявлення самих останніх значень. Іншими словами, якщо вони foo
містяться:
ts | foo
--------
1 | A
7 | B
і bar
містив:
ts | bar
--------
3 | C
5 | D
9 | E
Я хочу запит, який повертає:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
Якщо в обох таблицях є подія одночасно, порядок значення не має.
Мені вдалося створити потрібну структуру, використовуючи об'єднання всіх і фіктивних значень:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
що дасть мені лінійну шкалу нових значень, але я не зовсім спроможний розробити спосіб заповнення нульових значень на основі попередніх рядків. Я спробував функцію lag
вікна, але AFAICT він буде дивитись лише на попередній рядок, а не рекурсивно назад. Я переглянув рекурсивні CTE, але я не зовсім впевнений, як налаштувати умови запуску та припинення.
foo
таbar
суворо зростають чи тестовий випадок в цьому відношенні вводить в оману?