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
谢谢
沙
嗨,德诺斯。它似乎有效,但你能让我知道如何扩展到某一天,例如:直到 30JUN2018 吗?
有多种方法可以获得此结果,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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)