Предположим, у меня есть следующая таблица событий с 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