小编典典

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

sql

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日?


阅读 205

收藏
2021-04-07

共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)
2021-04-07