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

时间:2018-06-14 05:26:14

标签: sql teradata

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

1 个答案:

答案 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)