Устранение и сокращение перекрывающихся диапазонов дат

У меня есть набор диапазонов дат, состоящий как из частично, так и из полностью перекрывающихся дат, например:

UserID  StartDate   EndDate 
======  ==========  ==========
1       2011-01-01  2011-01-02  <- A
1       2011-01-01  2011-01-10  <- A
1       2011-01-08  2011-02-15  <- A
1       2011-02-20  2011-03-10  <- B
2       2011-01-01  2011-01-20  <- C
2       2011-01-15  2011-01-25  <- C

Используя T-SQL, я хотел бы создать новый набор данных для каждого пользователя, исключив перекрытие данных, расширение диапазонов и удаление избыточных данных там, где это необходимо, что приводит к примерно следующему:

UserID  StartDate   EndDate 
======  ==========  ==========
1       2011-01-01  2011-02-15 ('A', three rows combined, extending the range)
1       2011-02-20  2011-03-10 ('B', no change, no overlaps here)
2       2011-01-01  2011-01-25 ('C', two rows combined)

Курсоры можно использовать, если необходимо, но если бы я мог обойтись без них, было бы еще лучше.

10
задан Jakob Möllås 3 February 2013 в 17:15
поделиться