繁体   English   中英

按每个 ID 的最小和最大日期分组

[英]Group by min and max date for each ID

我在 SQL 上遇到了困难。 希望大家能帮我解决这个问题。 谢谢!

我有以下数据集:

Mike 1/1/2019  4/30/2019  
Mike 5/1/2019  7/31/2019  
Mike 11/1/2019 12/31/2019  
Jen  3/1/2019  5/31/2019  
Jen  6/1/2019  7/31/2019  

如何编写 SQL 脚本以便获得以下结果?

Mike 1/1/2019 7/31/2019  
Mike 11/1/2019 12/31/2019  
Jen 3/1/2019 7/31/2019  

我尝试编写以下 SQL 脚本,但它没有给我我想要的。

Select Name, min(startdate) as start, max(enddate) as end
from testtable
group by Name

我得到以下信息:

Mike 1/1/2019 12/31/2019  
Jen 3/1/2019  7/31/2019

这是一种间隙和孤岛问题。 我喜欢通过获取每条记录的累积最大结束日期来解决这个问题。 当这个结束日期与当前开始日期有差距时,一个新的“岛”开始:

select name, grp, min(startdate), max(enddate)
from (select t.*,
             sum(case when prev_enddate >= dateadd(day, -1, startdate) then 0 else 1 end) over
                 (partition by name order by startdate) as grp
      from (select t.*,
                   max(enddate) over (partition by name
                                      order by startdate
                                      rows between unbounded preceding and 1 preceding
                                     ) as prev_enddate
            from t
           ) t
     ) t
group by name, grp;

是一个 db<>fiddle。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM