我在一个表中有许多日期间隔:
开始 | 结束 |
---|---|
2019-03-01 | 2019-03-10 |
2019-01-11 | 2019-04-20 |
2020-11-11 | 2020-12-12 |
一种强力方法是将时间段划分为单独的几天。然后聚合并提取具有最大计数的天数。
您可以使用递归CTE:来完成此操作
with d as (
select s, e
from t
union all
select dateadd(day, 1, s), e
from d
where s < e
)
select top (1) with ties s, count(*) as overlaps
from d
group by s
order by dense_rank() over (order by count(*) desc);
如果您的间隔可能有100天或更多,那么您需要将option (maxrecursion 0)
添加到查询中。
这里有一个db<gt;不停摆弄