Retain values till there is a change in value in Teradata

最后都变了- 提交于 2019-12-30 14:44:10

问题


There is a transaction history table in teradata where balance gets changed only when there is a transaction Data as below:

Cust_id Balance Txn_dt
123     1000    27MAY2018
123     350     31MAY2018

For eg,For a customer(123) on May 27 we have a balance of 1000 and on May 31 there is a transaction made by the customer so balance becomes 350. There is no record maintained for May 28 to May 30 with same balance as on May 27 . I want these days data also to be there (With same balance retained and the date is incremented ) Its like same record has to be retained for rest of the days till there is a change in a balance done by the transaction . How to do this in teradata? Expected output:

Cust_id Balance Txn_dt
123     1000    27MAY2018
123     1000    28MAY2018
123     1000    29MAY2018
123     1000    30MAY2018
123     350     31MAY2018

Thanks Sandy

Hi Dnoeth. It seems to work, but can you let me know how to expand till a certain day for eg : till 30JUN2018 ?


回答1:


There are several ways to get this result, the simplest in Teradata utilizes Time Series Expansion for Periods:

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

If you run TD16.10+ you can replace the MIN OVER with a simplified LEAD:

Lead(Txn_dt)
Over (PARTITION BY Cust_id 
      ORDER BY Txn_dt)


来源:https://stackoverflow.com/questions/50850153/retain-values-till-there-is-a-change-in-value-in-teradata

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!