Teradata保留价值,直到下一次更改

Teradata保留价值,直到下一次更改,teradata,retained-in-memory,Teradata,Retained In Memory,我需要将以前的值存储在一列中,直到发生更改,如果发生更改,它将保留新值 范例 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/20

我需要将以前的值存储在一列中,直到发生更改,如果发生更改,它将保留新值

范例

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次不变,但需要更动态的

您需要嵌套的窗口函数:

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

非常感谢您提供的解决方案,它非常有效

p.S:很抱歉,我去度假了,需求有点变化,所以没有检查提供的解决方案

再次感谢您一直用您的知识祝福我们:

问候 阿尼迪亚