关于跨日,多班次的考勤难题
我想得到一个月员工的考勤报表
要求是根据班次表和打卡原始记录来显示员工在规定的上下班时间是否迟到,迟到多长时间,早退多长时间, 加班多长时间(单位最少是0.5小时),旷工多长时间
遇到星期六,跟日算加班。如果休息日上班算加班,不来不算旷工。
员工号 班次 打卡日期 时间1 时间2 迟到时间 早退时间 加班时间 旷工
A1459 MS2004.04.010844 1717 14 20 0
A1459 MS2004.04.020819 1910 0 0 1.5h
A1459 MS2004.04.030821 1740
.
.
A2176 LS2004.04.011932 0722 2 10 0
A2176 LS2004.04.021925 0832 0 0 1h
A2176 LS2004.04.03 1
还有上班打卡的有效时间段,下班打卡的有效时间段,防止重复多次打卡的现象发生.
shift_mst
班次 上班时间 下班时间 是否跨日上班 上班打卡的有效时间 上班打卡的有效时间
SHIFT_TYPE WORK_START WORK_END OVER_NIGHT START_PUNCH STOP_PUNCH OT_START OT_END OT_OVE_NIGHT
---------- ---------- -------- ----- -------
MS 08:30 17:30 N 06:30 10:30 14:00 19:00 N
LS 19:30 07:30 Y 17:30 21:30 05:30 09:30 N
休息日
班次 星期
SHIFT_TYPEDAY_OFF
MS 1
MS 7
LS 1
如MS 班次 正常上班时间为08:30 打卡的有效时间为 START_PUNCH 06:30--- STOP_PUNCH 10:30 如在这段时间打了2次,就取最大的一次为打卡上班的时间
如打卡的时间大于上班的时间就为迟到并得到迟到多少分钟。
下班正常下班时间为17:30 下班打卡的有效时间为 OT_START 14:00 --- OT_END 19:00 。如果在这短时间打多次就取最小的时间为下班打卡时间。
如果下班打卡时间-正常下班时间为加班时间。但加班时间要大于一个小时才算为加班时间。
打卡原始记录
record
员工号 班次 打卡日期 时间
emp_no shift_type date time
A1459 MS2004.04.010844
A1459 MS2004.04.011750
A1459 MS2004.04.020819
A1459 MS2004.04.021910
A1459 MS2004.04.030821
A1459 MS2004.04.031740
A1459 MS2004.04.040822
A1459 MS2004.04.041810
A2176 LS2004.04.011932
A2176 LS2004.04.020722
A2176 LS2004.04.021925
A2176 LS2004.04.030732
A2176 LS2004.04.041945
A2176 LS2004.04.050936