表1
ID 时间开始 时间结束 房间
1 10:00 11:00 A
2 12:00 13:15 A
3 11:00 11:30 B
上面这些是每天对房间的预约(已经预定)
现在求 房间A的每天的空闲时间段
时间开始 时间结束 房间
00:00 10:00 A
11:00 12:00 A
13:15 00:00 A
00: 00 11: 00 B
11: 30 00: 00 B
--建立測試環境
Create Table TEST
(ID Int,
时间开始 Varchar(5),
时间结束 Varchar(5),
房间 Varchar(1))
Insert TEST Select 1, '10:00', '11:00', 'A'
Union All Select 2, '12:00', '13:15', 'A'
Union All Select 3, '11:00', '11:30', 'B'
--測試
Select
'00:00' As 时间开始,
Min(时间开始) As 时间结束,
房间
From TEST
Group By 房间
Union All
Select * From(
Select
时间结束 As 时间开始,
(Select TOP 1 时间开始 From TEST Where ID>A.ID And 房间=A.房间 Order By 时间开始) As 时间结束 ,
房间
From TEST A) B
Where 时间结束 Is Not Null
Union All
Select
Max(时间结束),
'00:00',
房间
From TEST
Group By 房间
Order By 房间,时间开始
--刪除測試環境
Drop Table TEST
--結果
/*
时间开始 时间结束 房间
00:00 10:00 A
11:00 12:00 A
13:15 00:00 A
00:00 11:00 B
11:30 00:00 B
*/