Wenn Sie SQLServer 2012 oder höher verwenden, können Sie LAG
verwenden um den vorherigen Wert einer Spalte zu erhalten, dann SUM() OVER (ORDER BY ...)
um eine fortlaufende Summe zu erstellen, in diesem Fall eine, die die Änderung des Kursnamens zählt, die als GROUP BY
verwendet werden kann Anker
With A AS (
SELECT ClassRoom
, CourseName
, StartTime
, EndTime
, PrevCourse = LAG(CourseName, 1, CourseName) OVER (ORDER BY StartTime)
FROM Table1
), B AS (
SELECT ClassRoom
, CourseName
, StartTime
, EndTime
, Ranker = SUM(CASE WHEN CourseName = PrevCourse THEN 0 ELSE 1 END)
OVER (ORDER BY StartTime, CourseName)
FROM A
)
SELECT ClassRoom
, CourseName
, MIN(StartTime) StartTime
, MAX(EndTime) EndTime
FROM B
GROUP BY ClassRoom, CourseName, Ranker
ORDER BY StartTime