保留值直到 Teradata 中的值发生变化
Retain values till there is a change in value in Teradata
teradata 中有一个交易历史记录 table,只有在有交易时余额才会改变
数据如下:
Cust_id Balance Txn_dt
123 1000 27MAY2018
123 350 31MAY2018
例如,对于客户 (123),我们在 5 月 27 日的余额为 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)
teradata 中有一个交易历史记录 table,只有在有交易时余额才会改变 数据如下:
Cust_id Balance Txn_dt
123 1000 27MAY2018
123 350 31MAY2018
例如,对于客户 (123),我们在 5 月 27 日的余额为 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)