【问题标题】:Extracting correct start and end times in SQL from same day从同一天在 SQL 中提取正确的开始和结束时间
【发布时间】: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


    【解决方案1】:

    示意图:

    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 
    

    当然,如果我理解正确的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多