【发布时间】:2017-06-21 07:17:02
【问题描述】:
我有如下表格来存储我的员工的出勤数据:
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 在日期 2017-01-02 中,员工 ID 1 是 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
【问题讨论】:
-
当然,一旦你有了“在场时间”,“缺席时间”就只有 8 小时——在场时间,不是吗?
-
能否请您发布您当前的 SQL 语句?你试过什么了?您是否已经为解决您的问题付出了努力?
-
sum(EnterTime-ExitTime) ?你为什么要进入 - 退出? 9:00-17:00 肯定是-8,你想要退出时间-进入时间吗?
-
@JonSkeet 你是对的,但正如我在帖子中提到的那样,有些日子我的员工根本没有参加,那么如何找到那些日子?
-
@EstebanP。已添加到我的帖子中
标签: c# sql visual-studio time time-and-attendance