提问人:matt 提问时间:9/19/2023 最后编辑:Charliefacematt 更新时间:9/19/2023 访问量:29
MSSQL 查询开始和结束日期,其中日期依次为下一行 [重复]
MSSQL Query Start and End Date where dates sequential then next row [duplicate]
问:
我有一个mssql表,如下所示
日历
ID int
CalendarDate 日期时间
可用位 预订位
示例记录为
1
01/09/2023
1
0
2
02/09/2023
1
0
3
03/09/2023
1
0
4
04/09/2023
1
0
5
05/09/2023
0
0
6
06/09/2023
0
0
7
07/09/2023
1
0
8
08/09/2023
1
0
9
09/09/2023
1
0
从这些数据中,我需要以下内容
: 第 1 行 - 开始日期 - 01/09/2023 |结束日期 - 04/09/2023 第 2 行 - 开始日期 - 07/09/2023
|结束日期 - 09/09/2023 日期 05/09/2023 和 06/09/2023
不可用,因此可以跳过
这些记录表示可用日期的开始和结束日期,这些日期将用于指示不可用的开始和结束日期。
请您为此提供最佳查询建议。
我已经看过使用滞后、超前和差异,这只是下一行/上一行的区别。
我实际上需要差异大于 1 的拆分,以及拆分前范围的开始和结束日期。
答:
0赞
Tim Biegeleisen
9/19/2023
#1
这是一个差距和孤岛问题。一种方法使用行号差方法:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY CalendarDate) rn1,
ROW_NUMBER() OVER (PARTITION BY Available ORDER BY CalendarDate) rn2
FROM Calendar
)
SELECT MIN(CalendarDate) AS [Start Date],
MAX(CalendarDate) AS [End Date]
FROM cte
WHERE Available = 1
GROUP BY rn1 - rn2
ORDER BY MIN(CalendarDate);
评论