Рекурсивный CTE - объединить даты начала и окончания

У меня есть следующая таблица:

row_num customer_status    effective_from_datetime
------- ------------------ -----------------------
1       Active             2011-01-01
2       Active             2011-01-02
3       Active             2011-01-03
4       Suspended          2011-01-04
5       Suspended          2011-01-05
6       Active             2011-01-06

И я пытаюсь добиться следующего результата, в котором последовательные строки с одинаковым статусом объединяются в одну строку с эффективным диапазоном дат от и до:

customer_status effective_from_datetime effective_to_datetime
--------------- ----------------------- ---------------------
Active          2011-01-01              2011-01-04
Suspended       2011-01-04              2011-01-06
Active          2011-01-06              NULL

Я могу заставить рекурсивный CTE выводить правильное значение effective_to_datetime на основе следующей строки, но у меня проблемы со слиянием диапазонов.

Код для создания выборки данных:

CREATE TABLE #temp
(
row_num INT IDENTITY(1,1),
customer_status VARCHAR(10),
effective_from_datetime DATE
)

INSERT INTO #temp
VALUES 
('Active','2011-01-01')
,('Active','2011-01-02')
,('Active','2011-01-03')
,('Suspended','2011-01-04')
,('Suspended','2011-01-05')
,('Active','2011-01-06')
6
задан Martin Smith 16 December 2011 в 16:01
поделиться