Сохранять значения только для определенного раздела данных в терадате - PullRequest
0 голосов
/ 27 июня 2018

Ниже ссылка на мой предыдущий вопрос. Сохранять значения до тех пор, пока в Teradata не произойдет изменение значения

Это сработало, как было предложено одним из участников сообщества @Dnoeth. Может ли это сохранение выполняться только для определенного раздела данных?

I.e. Сохранять данные только для данных, где Dep - это A или B. Когда Dep - это C, просто используйте то же значение, что и для ввода, и нет необходимости сохранять до определенного значения.

Data:
Cust_id Balance st_ts          Dep
123     1000    27MAY2018 A
123     350     31MAY2018  A
256     2000   29MAY2018  B
345     1000   28APR2018   C
345     1200   26MAY2018   C

Требуемое значение:

Cust_id Balance st_ts         Dep
123     1000    27MAY2018 A
123     1000    28MAY2018 A
123     1000    29MAY2018 A
123     1000    30MAY2018 A
123     350     31MAY2018  A
256     2000   29MAY2018  B
256     2000   30MAY2018  B
256     2000    31MAY2018 B
345     1000   28APR2018   C
345     1200   26MAY2018   C

Используемый запрос:

Wth cte
{
  SELECT customer_id, bal, st_ts,
      -- return the next row's date
      Coalesce(Min(st_ts)
               Over (PARTITION BY customer_id 
                     ORDER BY st_ts
                     ROWS BETWEEN 1 Following AND 1 Following)
              ,Date '2018-06-01') AS next_Txn_dt
   FROM BAL_DET;
}
SELECT customer_id, bal
  ,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(ST_TS, next_Txn_dt) AS pd;

Спасибо Sandy

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете добавить СЛУЧАЙ для проверки на Dep = 'C':

WITH cte AS 
(  SELECT customer_id, bal, st_ts, dep,
      -- return the next row's date
      CASE
        WHEN dep = 'C' 
           THEN st_ts +1 -- simply increase date
        ELSE
           Coalesce(Min(st_ts)
                    Over (PARTITION BY customer_id 
                          ORDER BY st_ts
                          ROWS BETWEEN 1 Following AND 1 Following)
                   ,DATE '2018-06-01')
      END AS next_Txn_dt
   FROM BAL_DET
)
SELECT customer_id, bal
  ,Last(pd) -- last day of the period
  ,dep
FROM cTE
-- make a period of the current and next row's date
-- and return one row per day
EXPAND ON PERIOD(ST_TS, next_Txn_dt) AS pd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...