我有一个包含 24 个条目的临时表,每个条目对应一个由 DayID 注释的特定日期的每个小时。该表包含在该特定时间范围内应用程序是打开还是关闭的指示。
我想减少表中的条目数,只显示应用程序应该打开的时间。
部分样本数据如下:
CREATE TABLE #OnOff
(
RowID INT identity(1, 1),
DayID TINYINT,
OnOff BIT,
StartTime TIME,
EndTime TIME
)
INSERT INTO #OnOff (DayID, OnOff, StartTime, EndTime) VALUES
(1, 0, '00:00', '00:59'),
(1, 0, '01:00', '01:59'),
(1, 0, '02:00', '02:59'),
(1, 1, '03:00', '03:59'),
(1, 1, '04:00', '04:59'),
(1, 0, '05:00', '05:59'),
(1, 1, '06:00', '06:59'),
(1, 1, '07:00', '07:59'),
(1, 0, '08:00', '08:59'),
(1, 0, '09:00', '09:59'),
(1, 0, '10:00', '10:59'),
(1, 0, '11:00', '11:59'),
(1, 0, '12:00', '12:59'),
(1, 0, '13:00', '13:59'),
(1, 1, '14:00', '14:59'),
(1, 1, '15:00', '15:59'),
(1, 1, '16:00', '16:59'),
(1, 0, '17:00', '17:59'),
(1, 0, '18:00', '18:59'),
(1, 0, '19:00', '19:59'),
(1, 0, '20:00', '20:59'),
(1, 0, '21:00', '21:59'),
(1, 0, '22:00', '22:59'),
(1, 0, '23:00', '23:59')
所需的输出应该是
DayID StartTime EndTime
1 03:00 04:59
1 06:00 07:59
1 14:00 16:59
#OnOff 表将始终包含一天中每个小时的值(即结束时间和开始时间总是连续的,除了最后一小时)。显然可以使用游标来实现这一点,但这似乎效率很低。有没有更好的方法来达到这个结果。