Создаются и загружаются две временные таблицы ... Вот схема.
Create table #SH ([date] datetime,
sched_id int,
agent_id int)
Create table #SD (sched_id int,
start_minute int,
length int,
exception_code int)
( К сожалению, схему и дизайн я не могу изменить, обе временные таблицы загружаются из плоских файлов. При необходимости я могу представить и загрузить новые временные таблицы).
Немного предыстории. В таблице заголовков #SH для расписания людей указано «Start_minute», а для «schedule_length» указывается в минутах. Например, если начальная минута и продолжительность расписания равны 480, это будет читаться как 8:00 (8:00 = 480-я минута) и продолжаться до 16:00 (480 минут спустя, 16:00 = 960-я минута)
Таблица #SD содержит исключения для заголовка. . В приведенном выше примере у человека, скорее всего, будет исключение обеда, которое будет start_minute = 720 и длиной 30 (12:00 - 12:30).
Дата и agent_id - единственное, что меня интересует из #SH, меня интересует информация об исключении в #sd.
Этот запрос работает:
Select [date],#sd.start_minute,#sd.length,#sd.start_minute + #sd.length as 'end_minute',agent_id
from #SH
inner join #SD on #SD.sched_id = #sh.sched_id
* end_minute - это, в конечном счете, вычисленное значение of start + length = end
Это возвращает что-то вроде:
Date Start length end
1 2010-11-11 600 30 630
2 2010-11-11 630 40 670
3 2010-11-11 750 15 765
4 2010-11-11 800 40 840
Теперь я хотел бы сказать, что это закончилось, и уйти ... но проблемы с вводом данных существуют. В строках 1 и 2 время окончания строки 1 совпадает со временем начала строки 2 и должно быть объединено, чтобы мои результаты выглядели так:
Date Start length end
1 2010-11-11 600 70 670
2 2010-11-11 750 15 765
3 2010-11-11 800 40 840
Есть идеи, как построить эту логику, поэтому я возвращаю 3 строки вместо 4? На данный момент я работаю над объединением таблицы с самой собой на # sd1.start + # sd1.length = # sd2.start.
И, чтобы еще больше усложнить ... приведенный выше пример состоял из двух строк, которые необходимо было объединить. Я наткнулся на запись, в которой было 30 последовательных 1-минутных записей, которые мне нужно было преобразовать в одну запись. К счастью, они не могут перекрываться (у вас не будет двух записей, занимающих одни и те же минуты), но я не думаю, что оператор соединения, который я рассматриваю выше, сработает для этого.