sql-保留值,直到Teradata中的值更改为止

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.似乎有效,但是您能不能让我知道如何扩展到某天,例如:直到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)

转载注明原文:sql-保留值,直到Teradata中的值更改为止 - 代码日志