Есть таблица #Operations, содержащая список временных интервалов (ID,START_TIME,STOP_TIME).
И другая таблица - #Cross, содержащая "пересечения" интервалов из таблица #Operations (ID1, BT1, ET1, ID2, BT2, ET2).
Необходимо объединить пересекающиеся интервалы в #Operations.
Сейчас это происходит таким образом:
DECLARE cr_Cross CURSOR LOCAL FORWARD_ONLY FOR
SELECT * FROM #Cross
OPEN cr_Cross
FETCH NEXT FROM cr_Cross INTO @ID1, @BT1, @ET1, @ATM_ID1, @ID2, @BT2, @ET2, @ATM_ID2
WHILE @@FETCH_STATUS = 0 BEGIN
-- Объединяем интервалы, корректируем первую запись, и удаляем вторую
IF @BT2 < @BT1 SET @BT1=@BT2
IF @ET2 > @ET1 SET @ET1=@ET2
UPDATE #Operations SET
START_TIME=@BT1
,STOP_TIME=@ET1
WHERE [ID]=@ID1
DELETE #Operations WHERE [ID]=@ID2
FETCH NEXT FROM cr_Cross INTO @ID1, @BT1, @ET1, @ATM_ID1, @ID2, @BT2, @ET2, @ATM_ID2
END
CLOSE cr_Cross
DEALLOCATE cr_Cross
Вопрос: можно ли избежать использования курсора и если да, то как?