У меня есть следующая таблица:Рекурсивный 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
я могу получить рекурсивное ОТВ для вывода правильного 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')
О, и я не хочу использовать курсор или цикл, потому что план заключается в использовании этой логики в представлении. – shakedown7
Что делать, если у вас нет записи о дате? Должно ли это считаться пробелом в последовательности? например предположим, что строки '('Active', '2011-01-02')' не было? –