Я пытаюсь сделать UPDATE
таблицу и заменить значения NULL
, но с определенными условиями. Я привел пример ниже и закажу его в случаях, чтобы помочь проиллюстрировать, где мои условия применяются.Oracle sql-replace null со следующим и p
1º - В случае, если есть значение NULL
, оно должно заменить прежним известным значением. (CASE 1-3)
2º - При наличии двух последовательных NULL
и ID
изменений. Я ожидаю, что он заберет предыдущее известное значение от ID 5
и следующее от ID 6
, независимо от того, что DATE
. (CASE 4-5)
ID DATE HOUR VAL CASE
-- ---------- ----- ------- ------
5 2015.03.29 16 15.45 1
5 2015.03.30 13 NULL 2
5 2015.03.30 14 33.45 3
5 2015.03.31 15 NULL 4
6 2015.02.27 03 NULL 5
6 2015.02.27 04 76.77 6
Вот как это должно выглядеть так:
ID DATE HOUR VAL CASE
-- ---------- ----- ------- ------
5 2015.03.29 16 15.45 1
5 2015.03.30 13 15.45 2
5 2015.03.30 14 33.45 3
5 2015.03.31 15 33.45 4
6 2015.02.27 03 76.77 5
6 2015.02.27 04 76.77 6
я уже успел сделать свое 1º состояние, хотя я не могу видеть, как я собираюсь реализовать CASE 4-5. Я пробовал так много способов, и я не понимаю, как это сделать.
Несмотря на то, что я делаю в UPDATE
здесь, в случае, если кто-то знает, как это сделать с помощью только SELECT
, я могу экспортировать результаты, а затем INSERT
его снова, но если вы можете добавить в этот запрос я ценю. Спасибо за любую помощь!
MERGE INTO DADOS t1
USING (
SELECT rowid rd, "ID", "DATE", "HOUR",
last_value("VAL" ignore nulls)
OVER (order by "DATE"
rows between unbounded preceding and current row
) as newVAL
FROM DADOS
) x
ON (t1.rowid = x.rd)
WHEN MATCHED THEN UPDATE SET t1."VAL" = x.newVAL;
Да она работала, спасибо очень много !! – Zalif