Как объединить временные интервалы в SQL Server

Предположим, у меня есть следующая таблица событий с personId , startDate и endDate .

Я хочу знать, сколько времени человек X потратил на выполнение события (события могут перекрывать друг друга).

Если у человека только 1 событие, это просто: dateiff (dd, startDate, endDate)

Если у человека есть 2 события, это становится сложным.

Я установлю несколько сценариев ожидаемых результатов.

Сценарий 1

startDate endDate
1         4
3         5

Это означает, что результаты должны быть датированы от 1 до 5

Сценарий 2

startDate endDate
1         3
6         9

это означает, что результаты должны быть некоторыми из датированных (dd, 1,3) и dateiff (dd, 6,9)

Как я могу получить этот результат в запросе sql? Я могу думать только о группе операторов if, но у одного и того же человека может быть n событий, поэтому запрос будет действительно запутанным.

Shredder Edit: Я хотел бы добавить третий сценарий:

startDate endDate
1       5
4       8
11      15

Желаемый результат для сценария Shredder:

(1,5) и (4,8) объединяются в (1,8), поскольку они перекрываются, тогда нам нужно dateiff (1,8) + dateiff (11,15) => 7 + 4 => 11

5
задан marc_s 4 November 2011 в 21:30
поделиться