C# 计算员工每天的缺勤时间

C# 计算员工每天的缺勤时间,c#,sql,visual-studio,time,time-and-attendance,C#,Sql,Visual Studio,Time,Time And Attendance,我有一个表来存储我的员工的考勤数据,如下所示: EmployeeID| Date |EnterTime|ExitTime| 1 |2017-01-01|07:11:00 |15:02:00| 2 |2017-01-01|07:30:00 |12:00:00| 2 |2017-01-02|07:00:00 |15:00:00| 1 |2017-01-02|07:30:00 |10:00:00| 1 |2017-

我有一个表来存储我的员工的考勤数据,如下所示:

EmployeeID|   Date   |EnterTime|ExitTime|
    1     |2017-01-01|07:11:00 |15:02:00|
    2     |2017-01-01|07:30:00 |12:00:00|
    2     |2017-01-02|07:00:00 |15:00:00|
    1     |2017-01-02|07:30:00 |10:00:00|
    1     |2017-01-02|11:20:00 |15:00:00|
    1     |2017-01-03|09:30:00 |10:00:00|
    1     |2017-01-03|11:20:00 |15:00:00|
实际上我的工作时间是从07:00:00到15:00:00

我想总结每个员工的缺勤时间,例如: 2017-01-01中,员工ID 2的缺勤时间为03:00:00 员工ID 1的日期2017-01-02为01:00:00小时。 日期2017-01-03中,员工id 1为02:30:00 员工id 2缺勤时间为08:00:00,因为我的表中没有日志。 最后需要以下报告:

EmployeeID|TotalWorkingHour       |TotalAbsenceHour|
    1     |sum(EnterTime-ExitTime)|05:09:00        |
    2     |sum(EnterTime-ExitTime)|11:30:00        |
我通过以下选择获得总工作秒数,但不知道如何计算缺勤秒数:

select EmployeeID,
sum(datediff(second,Convert(DATETIME, EnterTime, 114), Convert(DATETIME, ExitTime, 114)) ) as TotalWorkingSeconds 
from Attendance
where Attendance.Date between @FromDate and @ToDate 
and (EnterTime is not null) 
and (ExitTime is not null)
group by EmployeeID

这可能不是最终的完美解决方案,但它可以解决:

声明@StartDate日期、@EndDate日期 设置@StartDate='2016-12-31' 设置@EndDate='2017-01-05'-GETDATE 选择alldate和employee.EmployeeID ,alldate_和_employee.Date ,COALESCEemployee_workingdays.WorkingMinutes,0为TimeWorked ,alldate_和_employee.PlannedWorkingTime-合并employee_workingdays.WorkingMinutes,0 as WorkedTools分钟 从…起 -返回包含所有员工和所有日期的组合的表 选择不同的EmployeeID,datelist.Date,480作为计划工作时间 从mytable 交叉连接 -选择@StartDate和@Enddate之间的所有日期 选择DATEADDDAY,数字+1,@StartDate[日期] 从主..spt_值 其中type='P' 和DATEADDDAY,数字+1,@StartDate<@EndDate 日期表 alldate_和_员工 左外连接 -将每个员工一个工作日的工作时间分组 选择EmployeeID 日期 ,SUMDATEDIFFminute,EnterTime,ExitTime作为工作分钟 从mytable 按雇员ID分组 日期 员工工作日 在employee_workingdays.Date=所有日期和employee.Date 和employee_workingdays.EmployeeID=alldate_和employee.EmployeeID 按alldate_和_employee.Date、alldate_和_employee.EmployeeID订购
当然,一旦你有了出席时间,缺席时间就只有8个小时——出席时间,不是吗?你能发布你当前的SQL语句吗?到目前为止你试过什么?你已经尽力解决你的问题了吗?sumEnterTime ExitTime?你为什么要进入-退出??9:00-17:00肯定会给-8,你想要进出时间吗?@JonSkeet你说得对,但正如我在帖子中提到的,我的员工有几天根本没有参加,那么如何找到那些日子呢?@EstebanP。我的帖子里增加了