У меня есть таблица SQL Events (ID int, Event int, StartTime datetime, Duration int
).
Event
- это код события (1 = система работает, 2 = перерыв)
Duration
- это количество секунд, в течение которогособытие было активным.
Я хотел бы получить количество секунд, в течение которых событие 1 было активным, но вычесть длительность события 2 .
Например, событие 1 было с 1:00 до 6:00, событие 2 с 0:00 до 2:00 и событие 2 с 5:00 до 6:00.Общее время должно быть от 2:00 до 5:00 -> 3 часа.
Есть способ, который я могу придумать: для каждого события 1 найти все событий 2, который может пересекаться с событием 1, и для каждого события 2 в этом наборе: обрезать его продолжительность, чтобы получить только ту часть, которая была активной во время его события 1.
, например, для моегособытие 1 (1:00 - 6:00) Я найду событие 2 (0:00 - 2:00), получу только ту часть, которая меня интересует (1: 00-2: 00);найдите другое событие 2 (5: 00-6: 00), получите интересующую меня часть (это целое событие 5: 00-6: 00) - подведены два часа.Общее время события 1 составило 5 часов;5 часов - 2 часа (событие 2) - это 3 часа.
Но это не сработает, если в указанном интервале есть тысячи событий, поэтому я бы предпочел подсказку решения без циклов (курсоров).).