我想分析一下我的数据集,以找出数据的差异。
我的样本日期集:
id status stdate enddate
1 new 01-JUL-17 31-JUL-17
1 process 01-OCT-17 31-DEC-18
1 new 01-JAN-19 31-JAN-19--- issue
2 new 01-SEP-14 31-JAN-15
2 process 01-JUN-16 30-NOV-17
2 complete 01-DEC-17 31-DEC-18
....
....
我想知道其中有多少ID的结果状态比当前的要早。状态序列的顺序应该是新的-进程完成的。因此,我希望报告所有ID,其中最近的状态已反转为较早的状态。
发布于 2019-03-18 20:28:24
您可以使用LAG()
函数查找违规行,如下所示:
with x (id, status, stdate, enddate,
prev_id, prev_status, prev_stdate, prev_enddate) as (
select
id,
status,
stdate,
enddate,
lag(id) over(partition by id order by stdate),
lag(status) over(partition by id order by stdate),
lag(stdate) over(partition by id order by stdate),
lag(enddate) over(partition by id order by stdate)
from my_table
)
select * from x
where status = 'new' and prev_status in ('process', 'complete')
or status = 'process' and prev_status = 'complete'
注意事项:我假设您只需要在同一ID
的行之间进行比较。
https://stackoverflow.com/questions/55229458
复制相似问题