Как объединить временные интервалы в 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