У меня есть таблица «Сервис» с миллионами строк. Каждая строка соответствует службе, предоставляемой персоналом в заданную дату и временной интервал (каждая строка имеет уникальный идентификатор). Бывают случаи, когда сотрудники могут предоставлять услуги в перекрывающиеся временные рамки. Мне нужно написать запрос, который объединяет перекрывающиеся интервалы времени и возвращает данные в формате, показанном ниже.Временные интервалы перекрытия сложения/слияния
Я пробовал группировать поля StaffID и Date и получать Min of BeginTime и Max of EndTime, но это не учитывает неперекрывающиеся временные рамки. Как я могу это сделать? Опять же, таблица содержит несколько миллионов записей, поэтому рекурсивный подход CTE может иметь проблемы с производительностью. Заранее спасибо.
служба Таблица
ID StaffID Date BeginTime EndTime
1 101 2014-01-01 08:00 09:00
2 101 2014-01-01 08:30 09:30
3 101 2014-01-01 18:00 20:30
4 101 2014-01-01 19:00 21:00
Выход
StaffID Date BeginTime EndTime
101 2014-01-01 08:00 09:30
101 2014-01-01 18:00 21:00
Вот еще выборочные данные, установленные с помощью запроса, предложенного вкладчиком. http://sqlfiddle.com/#!6/bfbdc/3
Первые две строки в наборе результатов должны быть объединены в один ряд (06: 00-08: 45), но он генерирует два ряда (06: 00-08: 30 & 06: 00-08: 45)
Это только на время в течение одного дня? Есть ли какие-то времена, которые пересекают полночь? – Szymon
Да, только раз в течение одного дня. Время не будет проходить полночь. – Thracian