У меня проблемы с построением запроса, в котором для каждого сотрудника есть только одно расписание на каждый день. Данные, которыми я управляю, записывают каждый удар по времени и время каждого удара. Запрос, который я использовал, работал нормально, пока я не столкнулся с расписанием, которое длилось всю ночь. Ниже приведен запрос, который я использовал, и некоторые образцы данных.
SELECT EMPLOYEEID
,min(PUNCHIN) AS PUNCHIN
,max(PUNCHOUT) AS PUNCHOUT
FROM EMPSCHED
WHERE PUNCHIN <> PUNCHOUT
GROUP BY EMPLOYEEID
,CAST(PUNCHIN AS DATE)
order by EMPID, PUNCHIN
Образец таблицы:
EMPLOYEEID PUNCHIN PUNCHOUT
DGHAG 2020-07-10 20:00:00.000 2020-07-11 01:45:00.000
DGHAG 2020-07-11 01:45:00.000 2020-07-11 02:15:00.000
DGHAG 2020-07-11 02:15:00.000 2020-07-11 06:30:00.000
DGHAG 2020-07-11 06:30:00.000 2020-07-11 06:30:00.000
DGHAG 2020-07-11 20:00:00.000 2020-07-11 23:30:00.000
DGHAG 2020-07-11 23:30:00.000 2020-07-12 00:00:00.000
DGHAG 2020-07-12 00:00:00.000 2020-07-12 06:30:00.000
DGHAG 2020-07-12 06:30:00.000 2020-07-12 06:30:00.000
DGHAG 2020-07-12 20:00:00.000 2020-07-13 02:15:00.000
DGHAG 2020-07-13 02:15:00.000 2020-07-13 02:45:00.000
DGHAG 2020-07-13 02:45:00.000 2020-07-13 06:30:00.000
DGHAG 2020-07-13 06:30:00.000 2020-07-13 06:30:00.000
DGHFA 2020-07-08 08:30:00.000 2020-07-08 13:30:00.000
DGHFA 2020-07-08 13:30:00.000 2020-07-08 13:30:00.000
DGHFA 2020-07-09 08:30:00.000 2020-07-09 13:30:00.000
DGHFA 2020-07-09 13:30:00.000 2020-07-09 13:30:00.000
DGHFA 2020-07-11 08:30:00.000 2020-07-11 13:30:00.000
DGHFA 2020-07-11 13:30:00.000 2020-07-11 13:30:00.000
Цель состоит в том, чтобы иметь по одной записи для каждой смены, сглаживая графики до от первого удара дня до последнего удара смены, будь то тот же день или следующий.
Код создания таблицы:
CREATE TABLE [dbo].[EMPSCHED](
[EMPLOYEEID] [nvarchar](50) NULL,
[PUNCHIN] [datetime] NULL,
[PUNCHOUT] [datetime] NULL
)