记录之间的 SQL Server 日期时间范围

Posted

技术标签:

【中文标题】记录之间的 SQL Server 日期时间范围【英文标题】:SQL Server datetime ranges between records 【发布时间】:2021-01-28 01:39:14 【问题描述】:

在 SQL Server 中获取记录之间的日期时间范围的最佳方法是什么?我认为用一个例子来解释是最容易的。

我有以下数据 - 这些记录的开始和结束日期时间范围永远不会重叠:

ID Start End
1 1/27/2021 06:00:00 1/27/2021 09:00:00
2 1/27/2021 10:00:00 1/27/2021 14:00:00
3 1/27/2021 21:00:00 1/28/2021 04:00:00
4 1/28/2021 06:00:00 1/28/2021 09:00:00

我需要获取记录之间的日期时间范围。因此生成的 SQL 查询将返回以下结果集(ID 无关紧要):

ID Start End
1 1/27/2021 09:00:00 1/27/2021 10:00:00
2 1/27/2021 14:00:00 1/27/2021 21:00:00
3 1/28/2021 04:00:00 1/28/2021 06:00:00

提前感谢您的帮助。

【问题讨论】:

请向我们展示您的尝试 - SO 不是代码编写服务。 【参考方案1】:

使用lead():

select t.*
from (select id, end as start, lead(start) over (order by start) as end
      from t
     ) t
where end is not null;

注意:end 是一个糟糕的列名称,因为它是一个 SQL 关键字。我认为它仅用于说明目的。

Here 是一个 SQL Fiddle。

【讨论】:

以上是关于记录之间的 SQL Server 日期时间范围的主要内容,如果未能解决你的问题,请参考以下文章