我们有一个数据集,其中包含员工的轮班活动时间,如下所示:Data Table
结果集应如下所示:
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(starttime)和max(endtime)并按日期分组。但是,对于一个项目,员工上夜班。这是我的主要问题来自:
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时,但是对于开始/结束时间,我不确定从哪里开始。重要说明:由于公司的限制,我无法使用create table ...,因此最终结果必须是选择查询。
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