Teradata Сохранить значение до следующего изменения
Мне нужно сохранить предыдущее значение в столбце, пока не произойдет изменение, и в случае изменения оно сохранит новое значение
пример
Input
-------
ID Name Stdt EndDt
1 A 20/01/2019 20/02/2019
1 B 20/02/2019 20/03/2019
1 C 20/03/2019 15/05/2019
1 C 15/05/2019 16/05/2019
1 C 16/05/2019 19/06/2019
1 C 19/06/2019 15/07/2019
1 A 15/07/2019 NULL
Output
----------
ID Name Stdt EndDt Previous Name
1 A 20/01/2019 20/02/2019 NULL
1 B 20/02/2019 20/03/2019 A
1 C 20/03/2019 15/05/2019 B
1 C 15/05/2019 16/05/2019 B
1 C 16/05/2019 19/06/2019 B
1 C 19/06/2019 15/07/2019 B
1 A 15/07/2019 NULL C
Пробовали предыдущее и самостоятельное присоединение, но они ограничены количеством изменений (например, имя может оставаться постоянным N раз), но требует более динамичного
2 ответа
Большое спасибо за решение, оно сработало как шарм.
PS: Извините, я был в отпуске, и требования немного изменились, поэтому не проверял это предоставленное решение.
Еще раз спасибо, постоянно благословляя нас своими знаниями:)
С уважением, Аниндья
Вам нужны вложенные оконные функции:
SELECT ...
-- assignt the previous value to all following rows
Last_Value(CASE WHEN prev_name <> NAME THEN prev_name END IGNORE NULLS)
Over (PARTITION BY id
ORDER BY stdt, enddt) as previous_name
FROM
(
SELECT ...
-- flag the changed row
Lag(NAME) Over (PARTITION BY id ORDER BY stdt, enddt) AS prev_name
-- pre-TD 16.10
-- MIN(NAME)
-- Over (PARTITION BY id ORDER BY stdt, enddt
-- ROWS BETWEEN 1 Preceding AND 1 Preceding) AS prev_name
FROM mytable
) AS dt