【问题标题】:Teradata Retain value till next ChangeTeradata 保留价值直到下一次更改
【发布时间】: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 次)但需要更多动态

【问题讨论】:

    标签: teradata retained-in-memory


    【解决方案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 :对不起,我正在度假,要求发生了一些变化,所以没有检查提供的这个解决方案。

      再次感谢您一直以来的知识祝福我们:)

      问候 阿宁迪亚

      【讨论】:

        猜你喜欢
        • 2018-11-23
        • 1970-01-01
        • 2019-12-24
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        相关资源
        最近更新 更多