【问题标题】:Retain values till there is a change in value in Teradata保留值直到 Teradata 中的值发生变化
【发布时间】:2018-11-23 19:09:48
【问题描述】:

teradata 中有一个交易历史表,其中余额仅在有交易时才会更改 数据如下:

Cust_id Balance Txn_dt
123     1000    27MAY2018
123     350     31MAY2018

例如,对于 5 月 27 日的客户 (123),我们的余额为 1000,而在 5 月 31 日,客户进行了一笔交易,因此余额变为 350。5 月 28 日至 5 月 30 日没有记录与 5 月 27 日的余额相同。我希望这些天的数据也在那里(保留相同的余额并增加日期)它的相同记录必须在剩下的日子里保留,直到交易完成的余额发生变化。如何在 teradata 中执行此操作? 预期输出:

Cust_id Balance Txn_dt
123     1000    27MAY2018
123     1000    28MAY2018
123     1000    29MAY2018
123     1000    30MAY2018
123     350     31MAY2018

谢谢 桑迪

嗨,Dnoeth。它似乎有效,但你能告诉我如何扩展到某一天,例如:直到 30JUN2018 吗?

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    有几种方法可以得到这个结果,Teradata 中最简单的方法是利用时间序列展开周期:

    WITH cte AS
     (
       SELECT Cust_id, Balance, Txn_dt,
          -- return the next row's date
          Coalesce(Min(Txn_dt)
                   Over (PARTITION BY Cust_id 
                         ORDER BY Txn_dt
                         ROWS BETWEEN 1 Following AND 1 Following)
                  ,Txn_dt+1) AS next_Txn_dt
       FROM tab
     ) 
    SELECT Cust_id, Balance
      ,Last(pd) -- last day of the period
    FROM cte
    -- make a period of the current and next row's date
    -- and return one row per day
    EXPAND ON PERIOD(Txn_dt, next_Txn_dt) AS pd
    

    如果您运行 TD16.10+,您可以将 MIN OVER 替换为简化的 LEAD

    Lead(Txn_dt)
    Over (PARTITION BY Cust_id 
          ORDER BY Txn_dt)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-24
      • 2015-09-16
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      相关资源
      最近更新 更多