记录之间的 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 中第一条记录结束日期和下一条记录开始日期之间的重叠