本帖最后由 yaksha1 于 2020-9-11 17:29 编辑
请问下,目前正在统计每个人每天考勤数据是否正常,上班打一次卡,下班打一次卡,算是正常。打卡情况大致分两种,一种是正常白班,朝九晚五,一种是跨天,晚上到第二天凌晨。我们有排班时间,比如
姓名 排班开始日期 排班开始时间 排班结束日期 排班结束时间 上班时间 下班时间
裕民 2020-08-01 18:00:002020-08-02 06:00:00 21:00:00 04:00
刘文 2020-08-01 06:00:00 2020-08-01 18:00:00 09:00:00 17:00:00
根据排班规则 裕民 这个人要在 2020-08-01 18:00:00 之后打卡 , 到第二天 2020-08-02 06:00:00 之前 打卡就算 是 同一天打卡 (算作 2020-08-01的打卡日期)
刘文 这个人要在 2020-08-01 06:00:00 之后打卡 , 当天 2020-08-01 18:00:00之前打卡就算 同一天打卡
如果某个人的上班、下班打卡时间 在排班时间之内,且没有迟到早退 (比如刘文,上班肯定不能迟于早上9:00, 17:00之前早退),就属于正常考勤,设置为1 否则为0
测试数据如下
with a as (
select '裕民' 姓名, '2020-07-31' 排班开始日期 , '18:00:00' 排班开始时间 , '2020-08-01' 排班结束日期,'06:00:00' 排班结束时间,'2020-07-31 22:00:00'工作安排开始时间,'2020-08-01 03:00:00'工作安排结束时间,'2020-07-31 05:00:00' 打卡开始时间 from dual --7月30日上夜班一直到7月31日 上午打卡下班
union all
select '裕民' 姓名, '2020-07-31' 排班开始日期 , '18:00:00' 排班开始时间 , '2020-08-01' 排班结束日期,'06:00:00' 排班结束时间,'2020-07-31 22:00:00'工作安排开始时间,'2020-08-01 03:00:00'工作安排结束时间,'2020-07-31 19:00:00' 打卡开始时间 from dual --7月31日上班打卡
union all
select '裕民' 姓名, '2020-08-01' 排班开始日期 , '18:00:00' 排班开始时间 , '2020-08-02' 排班结束日期,'06:00:00' 排班结束时间,'2020-07-31 22:00:00'工作安排开始时间,'2020-08-01 03:00:00'工作安排结束时间,'2020-08-01 05:00:00' 打卡开始时间 from dual -- 7月31日上夜班一直到8月1日上午打卡下班
union all
select '裕民' 姓名, '2020-08-01' 排班开始日期 , '18:00:00' 排班开始时间 , '2020-08-02' 排班结束日期,'06:00:00' 排班结束时间,'2020-07-31 22:00:00'工作安排开始时间,'2020-08-01 03:00:00'工作安排结束时间,'2020-08-01 19:00:00' 打卡开始时间 from dual ---8月1日打卡上班
union all
select '刘文' 姓名, '2020-07-31' 排班开始日期 , '06:00:00' 排班开始时间 , '2020-07-31' 排班结束日期,'06:00:00' 排班结束时间,'2020-07-31 09:00:00'工作安排开始时间,'2020-07-31 17:00:00'工作安排结束时间,'2020-07-31 17:30:00' 打卡开始时间 from dual --7月31日下班打卡
union all
select '刘文' 姓名, '2020-08-01' 排班开始日期 ,'06:00:00' 排班开始时间 , '2020-08-01' 排班结束日期,'06:00:00' 排班结束时间,'2020-08-01 09:00:00'工作安排开始时间,'2020-08-01 17:00:00'工作安排结束时间,'2020-08-01 08:30:00' 打卡开始时间 from dual --8月1日上班打卡
union all
select '刘文' 姓名, '2020-08-01' 排班开始日期 , '06:00:00'排班开始时间 , '2020-08-01' 排班结束日期,'06:00:00' 排班结束时间,'2020-08-01 09:00:00'工作安排开始时间,'2020-08-01 17:00:00'工作安排结束时间,'2020-08-01 17:30:00' 打卡开始时间 from dual --8月1日下班打卡
)
select * from a