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

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

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

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

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

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

Сценарий 1

startDate endDate
1         4
3         5

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

Сценарий 2

startDate endDate
1         3
6         9

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

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

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

startDate endDate
1       5
4       8
11      15

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

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

Ответы на вопрос(7)

Ваш ответ на вопрос