Извлечение правильного времени начала и окончания в SQL с того же дня - PullRequest
0 голосов
/ 13 января 2020

У нас есть набор данных, содержащий времена сменной активности сотрудников, который выглядит следующим образом: Таблица данных

Набор результатов должен выглядеть следующим образом:

Date        - Employee ID - Start Time - End Time - Fixed Start Day
2020-01-02  - 17207       - 00:00      - 07:00    - NULL
2020-01-02  - 17207       - 23:00      - 07:00    - P

Для большинство сотрудников работают только в дневное время, и вы можете просто использовать min (время начала) и max (время окончания) и группировать по дате. Однако для одного проекта сотрудники работают в ночную смену. Вот откуда берутся мои основные вопросы:

1) Если их смена началась в предыдущий день, столбец с фиксированной датой должен показать «P»

2) Когда они закончили смещение на том же самом день, когда они начали новый, становится трудно определить правильное время начала / окончания.

Каков наилучший подход для этого? Я имел это в качестве отправной точки, прежде чем пытаться решить проблему с фиксированной датой, но это явно не годится:

            SELECT      schedDate,
                        tvID,
                        NULL as 'Fixed Start Day',
                        CONVERT(char(20),MIN(StartTime),108) as 'Fixed Start Time',
                        CONVERT(char(20),MAX(EndTime),108) as 'Fixed End Time'
            FROM        agentschedule   
            WHERE       DATEPART(yy,schedDate) = 2020 
            GROUP BY    schedDate
                        tvID

Я пробовал случай, когда для определения, когда фиксированный начальный день должен быть нулевым, а когда должен быть P, но со временем начала / окончания я не уверен, с чего начать ..
Важное примечание: из-за ограничений компании я не могу использовать создание таблицы ... поэтому конечный результат должен быть запросом выбора ,

1 Ответ

0 голосов
/ 13 января 2020

Схематично:

SELECT date,
       starttime,
       CASE WHEN FixedStartDay IS NULL 
            THEN endtime
            ELSE '24:00'
            END endtime
FROM table
UNION ALL
SELECT DATEADD(DAY, 1, date),
       '00:00',
       endtime
FROM table
WHERE FixedStartDay IS NOT NULL 

Конечно, если я правильно понимаю проблему.

...