Hr考勤计算问题-----急急急
班次:
EmpNo YYMMDD GO1 OUT1 GO2 OUT2
048901 2013-09-01 NULL NULL NULL NULL
048901 2013-09-02 08:30 12:00 13:00 17:30
048901 2013-09-04 08:40 12:10 13:10 17:40
048901 2013-09-05 08:40 12:10 13:10 17:40
打卡记录:
EmpNo CardTime
048901 2013-09-02 08:25
048901 2013-09-02 08:29
048901 2013-09-02 12:12
048901 2013-09-02 12:28
048901 2013-09-02 17:28
048901 2013-09-02 17:35
048901 2013-09-03 08:30
048901 2013-09-03 12:15
048901 2013-09-03 12:50
048901 2013-09-03 17:45
048901 2013-09-04 08:35
048901 2013-09-04 12:35
048901 2013-09-04 12:50
048901 2013-09-04 17:45
048901 2013-09-05 08:35
048901 2013-09-05 12:35
048901 2013-09-05 12:50
048901 2013-09-05 17:45
048901 2013-09-05 17:56
048901 2013-09-05 21:05
打卡记录10分钟内取第一条记录,如果在班次中间(12:00-13:00)只有一条打卡记录,打卡记录离班次哪个时间点较近算哪个班次点的打卡记录。如有迟到、早退优先算作迟到或早退卡。
班次时间为null、没有当天的排班或者在班次外的打卡均算休息时间,考勤结果均算为加班(无排班情况下(周末或者节假日)加班一天最多只能算8小时,有排班(平时)一天最多只能算3小时加班)
最后需要能算出:
1、是否考勤异常;
2、迟到xx分钟
3、早退xx分钟
4、考勤工时:xx小时
5、加班时长:xx小时
根据以上规则得到的结果为:
员工[048901]2013-09-02考勤异常;早退2分钟;迟到0分钟;考勤工时:7.96小时;加班时长:0小时
员工[048901]2013-09-03考勤正常;早退0分钟;迟到0分钟;考勤工时:0.00小时;加班时长:8小时
员工[048901]2013-09-04考勤正常;早退0分钟;迟到0分钟;考勤工时:8.00小时;加班时长:0小时
员工[048901]2013-09-05考勤正常;早退0分钟;迟到0分钟;考勤工时:8.00小时;加班时长:3小时
以上问题可以用MS SQL存储过程计算也可以用java计算,能提供一些思路也好
------解决方案--------------------建议分步骤完成,
select * from 班次
/*
EmpNo YYMMDD GO1 OUT1 GO2 OUT2