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 +,则可以将替换MIN OVER为简化的LEAD:
MIN OVER
LEAD
Lead(Txn_dt) Over (PARTITION BY Cust_id ORDER BY Txn_dt)