Отредактированный вопрос:
У меня есть три таблицы, для которых я использую объединения, чтобы извлечь один набор записей данных в следующем формате.
tbl_hours: jobID, bosstaskID, date, starttime, endtime, hours
tbl_jobs: jobID : other fields
tbl_tasks: taskID, officetaskID :other fields
ВЫБРАТЬ вывод всех записей
empID hHours hStartTime hStopTime taskID officeTaskID hDate jobID
1 .50 2018-06-25 07:00:00.000 2018-06-25 07:30:00.000 LOAD Load Up/UNL 2018-06-25 00:00:00.000 1
1 .25 2018-06-25 07:30:00.000 2018-06-25 07:45:00.000 DT Drive Time 2018-06-25 00:00:00.000 1
1 1.25 2018-06-25 07:45:00.000 2018-06-25 09:00:00.000 PATH Job Site 2018-06-25 00:00:00.000 1
1 .25 2018-06-25 09:00:00.000 2018-06-25 09:15:00.000 BREAK Break 2018-06-25 00:00:00.000 1
1 .75 2018-06-25 09:15:00.000 2018-06-25 10:00:00.000 OUT-TERM Job Site 2018-06-25 00:00:00.000 1
1 .75 2018-06-25 10:00:00.000 2018-06-25 10:45:00.000 HEAD-TERM Job Site 2018-06-25 00:00:00.000 1
1 .50 2018-06-25 10:45:00.000 2018-06-25 11:15:00.000 TEST Job Site 2018-06-25 00:00:00.000 1
1 1.00 2018-06-25 11:15:00.000 2018-06-25 12:15:00.000 LUNCH Lunch 2018-06-25 00:00:00.000 1
1 1.00 2018-06-25 12:15:00.000 2018-06-25 13:15:00.000 ROUGH Job Site 2018-06-25 00:00:00.000 2
1 .75 2018-06-25 13:15:00.000 2018-06-25 14:00:00.000 OUT-TERM Job Site 2018-06-25 00:00:00.000 2
1 .75 2018-06-25 14:00:00.000 2018-06-25 14:45:00.000 HEAD-TERM Job Site 2018-06-25 00:00:00.000 2
1 .50 2018-06-25 14:45:00.000 2018-06-25 15:15:00.000 TEST Job Site 2018-06-25 00:00:00.000 2
1 .25 2018-06-25 15:15:00.000 2018-06-25 15:30:00.000 BREAK Break 2018-06-25 00:00:00.000 2
1 .50 2018-06-25 15:30:00.000 2018-06-25 16:00:00.000 ST Shop Time 2018-06-25 00:00:00.000 NULL
1 1.00 2018-06-25 16:00:00.000 2018-06-25 17:00:00.000 ROUGH Job Site 2018-06-25 00:00:00.000 3
1 1.00 2018-06-25 17:00:00.000 2018-06-25 18:00:00.000 FIBER-TERM Job Site 2018-06-25 00:00:00.000 3
1 .50 2018-06-25 18:00:00.000 2018-06-25 18:30:00.000 TEST Job Site 2018-06-25 00:00:00.000 3
1 .50 2018-06-25 18:30:00.000 2018-06-25 19:00:00.000 LOAD Load Up/UNL 2018-06-25 00:00:00.000 3
1 .25 2018-06-25 19:00:00.000 2018-06-25 19:15:00.000 BREAK Break 2018-06-25 00:00:00.000 3
1 .50 2018-06-25 19:15:00.000 2018-06-25 19:45:00.000 JS Job Site 2018-06-25 00:00:00.000 3
Когда я использую следующий запрос SQL, я могу приблизить его к желаемому формату, за исключением того, где вы видите последний период перерыва.Он выбирает максимальное значение (hStopTime) задачи после перерыва.
SQL-запрос
SELECT tbl_employees.empID, SUM(tbl_hours.hHours) as hHours,
Min(tbl_hours.hStartTime) as hStartTime,
Max(tbl_hours.hStopTime) as hStopTime,
tbl_task.taskPrintShort as officeTaskID, tbl_hours.hDate,
tbl_jobs.jobID
FROM ((tbl_Hours LEFT JOIN tbl_task ON tbl_hours.codeID = tbl_task.taskID)
LEFT JOIN tbl_employees on tbl_hours.empID=tbl_employees.empID)
LEFT JOIN tbl_jobs on tbl_hours.jobID = tbl_jobs.jobID
WHERE tbl_hours.empID=1 and tbl_hours.hDate='2018-06-25'
GROUP BY tbl_employees.empID, tbl_jobs.jobID, tbl_task.taskPrintShort,
tbl_employees.empFirst, tbl_employees.empLast, tbl_hours.hDate
ORDER BY tbl_hours.hStartTime
Выходные данные вышеприведенного оператора SELECT.
empID hHours hStartTime hStopTime OfficeTaskID hDate jobID
1 .50 2018-06-25 07:00:00.000 2018-06-25 07:30:00.000 Load Up/UNL 2018-06-25 00:00:00.000 1
1 .25 2018-06-25 07:30:00.000 2018-06-25 07:45:00.000 Drive Time 2018-06-25 00:00:00.000 1
1 3.25 2018-06-25 07:45:00.000 2018-06-25 11:15:00.000 Job Site 2018-06-25 00:00:00.000 1
1 .25 2018-06-25 09:00:00.000 2018-06-25 09:15:00.000 Break 2018-06-25 00:00:00.000 1
1 1.00 2018-06-25 11:15:00.000 2018-06-25 12:15:00.000 Lunch 2018-06-25 00:00:00.000 1
1 3.00 2018-06-25 12:15:00.000 2018-06-25 15:15:00.000 Job Site 2018-06-25 00:00:00.000 2
1 .25 2018-06-25 15:15:00.000 2018-06-25 15:30:00.000 Break 2018-06-25 00:00:00.000 2
1 .50 2018-06-25 15:30:00.000 2018-06-25 16:00:00.000 Shop Time 2018-06-25 00:00:00.000 NULL
1 3.00 2018-06-25 16:00:00.000 2018-06-25 19:45:00.000 Job Site 2018-06-25 00:00:00.000 3
1 .50 2018-06-25 18:30:00.000 2018-06-25 19:00:00.000 Load Up/UNL 2018-06-25 00:00:00.000 3
1 .25 2018-06-25 19:00:00.000 2018-06-25 19:15:00.000 Break 2018-06-25 00:00:00.000 3
Этопроблемная линия.
1 3.00 2018-06-25 16:00:00.000 2018-06-25 19:45:00.000 Job Site 2018-06-25 00:00:00.000 3
Мне нужно сгруппировать последние строки, как в этом примере
1 2.50 2018-06-25 16:00:00.000 2018-06-25 18:30:00.000 Job Site 2018-06-25 00:00:00.000 3
1 .50 2018-06-25 18:30:00.000 2018-06-25 19:00:00.000 Load Up/UNL 2018-06-25 00:00:00.000 3
1 .25 2018-06-25 19:00:00.000 2018-06-25 19:15:00.000 Break 2018-06-25 00:00:00.000 3
1 .50 2018-06-25 19:15:00.000 2018-06-25 19:45:00.000 Job Site 2018-06-25 00:00:00.000 3
В конечном итоге я пытаюсь получить время начала и окончания для всех officeTaskID, которыетипа «Сайт вакансий».Эта же задача может быть выполнена до или после другой задачи (например, перерыв).Мой офис-менеджер не хочет видеть всю информацию о задачах, которую я нахожу полезной.
Можно ли решить мою головоломку?
Редактировать: Информация о запрошенной версии -
Microsoft SQL Server 2000 - 8.00.2066 (Intel X86) 11 мая 2012 г. 18:41:14 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition для Windows NT 5.2 (сборка 3790: пакет обновления 2)