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年1月30日?
答案 0 :(得分: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)