oracle 的跨天查询,考勤跨天如何统计 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...

本帖最后由 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值