记录之间的 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 日期时间范围的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 中的 While 循环遍历日期范围,然后插入

SQL Server 中第一条记录结束日期和下一条记录开始日期之间的重叠

SQL 查询日期范围保存在 2 列中

SQL 检索具有不同序列号的所有记录,在日期范围和计数之间,拒绝代码 = "Low Current"

Sql Server - 从提供的范围内的数据库中获取日期

SQL Server:列出范围之间的月份