[英]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.