Максимальные и минимальные даты SQL с фильтром - PullRequest
0 голосов
/ 09 октября 2018

Следующая учетная запись была закрыта 19.01.2008, затем вновь открыта 27.02.2008, а затем снова закрыта 26.03.2008.Как мне написать sql для захвата, когда эта учетная запись была открыта и закрыта.Closerestrictind = 'C' - это когда учетная запись была закрыта.

Мы работаем в хранилище данных, где данные загружаются каждый день для сбора всей истории.

Для acct 1234 это должно выглядеть следующим образом:

closed on 1/19/2018
re-opened on 2/27/2018
closed on 3/26/2018

enter image description here

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы можете сделать два оператора выбора, первый с разделением row_number () по acctnbr, упорядочить по дате ... сохранить его в таблице tmp

Второй выбор, внутреннее объединение этой таблицы с самим собой, t1и t2.

, где t1.closerestrictedind = 'C'

И объединение, где t1.rownum> t2.rownum + 1

0 голосов
/ 09 октября 2018

Вы можете использовать lag():

select acctnbr, effectivedate,
       (case when closerestrictedind = 'C' then 'closed' else 'opened' end) as action
from (select t.*, lag(closerestrictedind) over (partition by acctnbr order by effectivedate) as prev_cr
      from t
     ) t
where prev_cr <> closerestrictedind;
...