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:很抱歉,我去度假了,需求有点变化,所以没有检查提供的解决方案 再次感谢您一直用您的知识祝福我们: 问候 阿尼迪亚