如何解决找到每个状态的最小重叠
我需要在所有组中找到状态为 Missing/Not Ready 的日期范围(只有重叠的日期范围,其中所有组的状态为 Missing/notready) '''
ID. Group. Eff_Date. Exp_Date Status
1. 1 1/1/18 10:00 3/4/18 15:23 Ready
1 1 3/4/18 15:24. 7/12/18 13:54. Not Ready
1. 1 7/12/18 13:55. 11/22/19 11:20 Missing
1. 1. 11/22/19 11:21. 9/25/20 1:12. Ready
1. 1. 9/25/20 1:13 12/31/99. Missing
1. 2 1/1/16 10:00 2/2/17 17:20 Ready
1 2 2/2/17 17:21. 5/25/18 1:23. Missing
1. 2 5/25/18 1:24 9/2/18 4:15 Not Ready
1. 2 9/2/18 4:16. 6/3/21 7:04. Missing
1. 2 6/3/21 7:04. 12/31/99. Ready
未准备好的输出:(以下是各组未准备好的日期)
5/25/18 1:24. 7/12/18 13:54 Not Ready
失踪:(以下是每个小组处于失踪状态的日期)
9/25/20 1:13 6/3/21 7:04 Missing
'''
解决方法
您可以通过逆透视和计数来做到这一点。假设周期对于给定的 id 不重叠:
with x as (
select eff_date as date,1 as inc
from t
where status = 'Missing'
union all
select end_date,-1 as inc
from t
where status = 'Missing'
)
select date,next_date,active_on_date
from (select date,sum(sum(inc)) over (order by date) as active_on_date,lead(date) over (order by date) as next_date
from x
group by date
) x
where active_on_date = (select count(distinct id) from t);
注意:这一次处理一个状态,这就是这个问题的要求。如果您想处理所有事件类型,请提出一个新问题,并附上适当的示例数据、所需结果和说明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。