保留值直到 Teradata 中的值发生变化

Retain values till there is a change in value in Teradata

teradata 中有一个交易历史记录 table,只有在有交易时余额才会改变 数据如下:

Cust_id Balance Txn_dt
123     1000    27MAY2018
123     350     31MAY2018

例如,对于客户 (123),我们在 5 月 27 日的余额为 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。它似乎有效,但你能告诉我如何扩展到某一天,例如:直到 2018 年 6 月 30 日吗?

有几种方法可以得到这个结果,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+ 你可以用简化的 LEAD:

替换 MIN OVER
Lead(Txn_dt)
Over (PARTITION BY Cust_id 
      ORDER BY Txn_dt)