以下帐户于2018年1月19日关闭,然后在2018年2月27日重新开放,然后在2018年3月26日再次关闭。我如何编写SQL来捕获打开和关闭此帐户的时间。 closerestrictind ='C'是帐户关闭的时间。
我们正在一个数据仓库中工作,每天都会加载数据以捕获所有历史记录。
对于acct 1234应该看起来像这样:
closed on 1/19/2018
re-opened on 2/27/2018
closed on 3/26/2018
谢谢!
答案 0 :(得分:5)
您可以使用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;
答案 1 :(得分:0)
您可以执行两个选择语句,第一个通过acctnbr进行row_number()分区,按日期排序...将其保存在tmp表中
第二个选择,内部将此表与t1和t2自身连接。
其中t1.closerestrictedind ='C'
和连接,其中t1.rownum> t2.rownum +1