Teradata Сохранить значение до следующего изменения - PullRequest
0 голосов
/ 25 октября 2019

Мне нужно сохранить предыдущее значение в столбце до тех пор, пока не произойдет изменение, и в случае изменения оно сохранит новое значение

Пример

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 ]

0 голосов
/ 14 ноября 2019

большое спасибо за решение, которое сработало как шарм.

PS: Извините, я был в отпуске, и требования немного изменились, поэтому я не проверял это решение при условии.

Спасибо еще раз, благословляя нас вашими знаниями постоянно

0 голосов
/ 25 октября 2019

Вам нужны вложенные оконные функции:

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
...