首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在查找重叠日期的同时查找哪些行正在重叠

如何在查找重叠日期的同时查找哪些行正在重叠
EN

Stack Overflow用户
提问于 2020-11-11 10:35:37
回答 1查看 83关注 0票数 0

我们如何才能找到重叠搭接b/w之间的日期。重叠指的是,当开始日期和结束日期在相同的范围内,下面的示例第1行没有重叠。第二至第五行可以被认为是一套超过圈,因为有开始日期和结束是超过与他们自己,第6和第7行可以被认为是一套超过一圈为例。第6行和第7行->第7行的开始日期与第6行的结束日期在同一范围内,因此它成为重叠。

一旦找到重叠,然后需要查找min(开始日期)和最大值(结束日期),并希望为每个重叠指定唯一的id,并且在S.NO列中应该显示哪些行是重叠的。

下面是I/p和O/p

EN

回答 1

Stack Overflow用户

发布于 2020-11-11 11:59:23

这是一种空隙和孤岛问题。您可以使用累积最大值来确定是否存在重叠。然后,一个累积和聚合做你想做的事情:

代码语言:javascript
复制
select id, min(start_date), max(end_date),
       listagg(s_no, ',') within group (order by s_no) as s_nos
from (select t.*,
             sum(case when prev_end_date >= start_date then 0 else 1 end) over (partition by id order by s_no) as grp
      from (select t.*,
                   max(end_date) over (
                       partition by id
                       order by s_no
                       rows between unbounded preceding and 1 preceding
                      ) as prev_end_date
            from t
           ) t
     ) t
group by id, grp;

这里是db<>fiddle。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64784760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档