Teradata 保留价值直到下一次更改
Posted
技术标签:
【中文标题】Teradata 保留价值直到下一次更改【英文标题】:Teradata Retain value till next Change 【发布时间】:2019-10-25 12:29:27 【问题描述】:我需要将以前的值存储在列中,直到发生更改,如果发生更改,它将保留新值
例子
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 次)但需要更多动态
【问题讨论】:
【参考方案1】:你需要嵌套的窗口函数:
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
【讨论】:
【参考方案2】:非常感谢它的魅力所在。
P.S :对不起,我正在度假,要求发生了一些变化,所以没有检查提供的这个解决方案。
再次感谢您一直以来的知识祝福我们:)
问候 阿宁迪亚
【讨论】:
以上是关于Teradata 保留价值直到下一次更改的主要内容,如果未能解决你的问题,请参考以下文章