SQL Server时间表查询

时间:2019-05-20 14:19:21

标签: sql sql-server tsql

我有一个如下的时间表表。 HourType字段表示员工是输入时间(“ 0”),还是其主管是否覆盖或输入时间(“ 1”)。如果主管超越时间,则同时有0条记录和1条记录(4/8/2019)。如果主管输入员工未输入的时间,则只有1条记录(4/12/2019)。我需要查询以找到给定一周的总时间。因此,在下面的示例中,本周的总工作时间应为39.5小时。

RecordId EmployeeId StartDate  EndDate   StartTime   EndTime      HourCount HourType
1        100        4/8/2019   4/8/2019  9:00:00 AM  5:00:00 PM   8         0
2        100        4/8/2019   4/8/2019  9:00:00 AM  4:30:00 PM   7.5       1
3        100        4/9/2019   4/9/2019  9:00:00 AM  5:00:00 PM   8         0
4        100        4/10/2019  4/10/2019 9:00:00 AM  5:00:00 PM   8         0
5        100        4/11/2019  4/11/2019 9:00:00 AM  5:00:00 PM   8         0
6        100        4/12/2019  4/12/2019 9:00:00 AM  5:00:00 PM   8         1

添加了第二个数据集,其中包括每天的多个记录,以计入午餐时间(4/11/2019)。此数据集的总小时数应为37.5。

RecordId EmployeeId StartDate  EndDate   StartTime   EndTime       HourCount HourType
1        100        4/8/2019   4/8/2019  9:00:00 AM  5:00:00 PM    8         0
2        100        4/8/2019   4/8/2019  9:00:00 AM  4:30:00 PM    7.5       1
3        100        4/9/2019   4/9/2019  9:00:00 AM  5:00:00 PM    8         0
4        100        4/10/2019  4/10/2019 9:00:00 AM  5:00:00 PM    8         0
5        100        4/11/2019  4/11/2019 9:00:00 AM  12:00:00 PM   3         0
6        100        4/11/2019  4/11/2019 9:30:00 AM  12:00:00 PM   2.5       1 
7        100        4/11/2019  4/11/2019 1:00:00 PM  5:00:00 PM    4         0   
8        100        4/12/2019  4/12/2019 9:00:00 AM  5:00:00 PM    8         1

1 个答案:

答案 0 :(得分:1)

您似乎想要:

select employeeId, sum(hourcount)
from (select t.*,
             row_number() over (partition by employeeid, startdate, enddate order by hourtype desc) as seqnum
      from t
     ) t
where seqnum = 1;

也就是说,如果多个记录与emplyeeidstartdateenddate匹配,则选择替代项。