从同一天提取SQL中正确的开始和结束时间

问题描述 投票:0回答:1

我们有一个数据集,其中包含员工的轮班活动时间,如下所示: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 ...,因此最终结果必须是选择查询。

sql sql-server database datetime resultset
1个回答
0
投票
示意性:

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

© www.soinside.com 2019 - 2024. All rights reserved.