【发布时间】:2020-01-13 13:07:08
【问题描述】:
我们有一个包含员工轮班活动时间的数据集,如下所示: 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
我尝试了一个案例,用于定义固定开始日期何时应为 null 以及何时应为 P,但是对于开始/结束时间,我不确定从哪里开始..
重要提示:由于公司限制,我不能使用创建表......所以最终结果必须是一个选择查询。
【问题讨论】:
标签: sql sql-server database datetime resultset