Sql 以多个日期间隔表示的平均日期

Sql 以多个日期间隔表示的平均日期,sql,sql-server,Sql,Sql Server,我在表中有许多日期间隔: 开始 终止 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 w

我在表中有许多日期间隔:

开始 终止 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天或更多天,则需要在查询中添加选项maxrecursion 0


是一把小提琴。

你期望的结果是什么?你尝试了什么?你也尝试了吗?为什么不起作用?快速搜索会告诉您,获取平均值和两个日期之间的差异DATEDIFF非常容易,因此当您尝试组合这两个函数时出现了什么问题?请尝试以相同的日期间隔计算行数。数字最大的计数*是最常见的日期间隔。如果要计算一个日期,该日期可能同时在两个日期中,并且不关心时间间隔,请在开始日期和结束日期之间使用UNION ALL,然后计算行数。同时显示所提供样本数据的预期结果。您要最常用的日期间隔,还是所有时间间隔中最常用的日期?