oracle 的跨天查询,考勤跨天如何统计 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...
本帖最后由 yaksha1 于 2020-9-11 17:29 編輯
請問下,目前正在統(tǒng)計(jì)每個(gè)人每天考勤數(shù)據(jù)是否正常,上班打一次卡,下班打一次卡,算是正常。打卡情況大致分兩種,一種是正常白班,朝九晚五,一種是跨天,晚上到第二天凌晨。我們有排班時(shí)間,比如
姓名? ?? ?? ? 排班開始日期? ?? ?? ???排班開始時(shí)間? ?? ?? ?? ?? ?? ?? ???排班結(jié)束日期? ?? ?排班結(jié)束時(shí)間? ? 上班時(shí)間? ?下班時(shí)間
裕民? ?? ?? ? 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
根據(jù)排班規(guī)則??裕民 這個(gè)人要在 2020-08-01 18:00:00 之后打卡 , 到第二天 2020-08-02 06:00:00 之前??打卡就算 是 同一天打卡 (算作 2020-08-01的打卡日期)
劉文? ?? ???這個(gè)人要在 2020-08-01 06:00:00??之后打卡 , 當(dāng)天 2020-08-01 18:00:00之前打卡就算 同一天打卡
如果某個(gè)人的上班、下班打卡時(shí)間 在排班時(shí)間之內(nèi),且沒有遲到早退 (比如劉文,上班肯定不能遲于早上9:00, 17:00之前早退),就屬于正常考勤,設(shè)置為1 否則為0
測試數(shù)據(jù)如下
with??a??as (
select '裕民'??姓名,? ?'2020-07-31' 排班開始日期 , '18:00:00' 排班開始時(shí)間 ,??'2020-08-01'??排班結(jié)束日期,'06:00:00' 排班結(jié)束時(shí)間,'2020-07-31 22:00:00'工作安排開始時(shí)間,'2020-08-01 03:00:00'工作安排結(jié)束時(shí)間,'2020-07-31 05:00:00' 打卡開始時(shí)間 from dual? ?--7月30日上夜班一直到7月31日 上午打卡下班
union all
select '裕民'??姓名,? ?'2020-07-31' 排班開始日期 , '18:00:00' 排班開始時(shí)間 ,??'2020-08-01'??排班結(jié)束日期,'06:00:00' 排班結(jié)束時(shí)間,'2020-07-31 22:00:00'工作安排開始時(shí)間,'2020-08-01 03:00:00'工作安排結(jié)束時(shí)間,'2020-07-31 19:00:00' 打卡開始時(shí)間 from dual??--7月31日上班打卡
union all
select '裕民'??姓名,? ?'2020-08-01' 排班開始日期 , '18:00:00' 排班開始時(shí)間 ,??'2020-08-02'??排班結(jié)束日期,'06:00:00' 排班結(jié)束時(shí)間,'2020-07-31 22:00:00'工作安排開始時(shí)間,'2020-08-01 03:00:00'工作安排結(jié)束時(shí)間,'2020-08-01 05:00:00' 打卡開始時(shí)間 from dual??-- 7月31日上夜班一直到8月1日上午打卡下班
union all
select '裕民'??姓名,? ?'2020-08-01' 排班開始日期 , '18:00:00' 排班開始時(shí)間 ,??'2020-08-02'??排班結(jié)束日期,'06:00:00' 排班結(jié)束時(shí)間,'2020-07-31 22:00:00'工作安排開始時(shí)間,'2020-08-01 03:00:00'工作安排結(jié)束時(shí)間,'2020-08-01 19:00:00' 打卡開始時(shí)間 from dual? ?---8月1日打卡上班
union all
select '劉文'??姓名,? ?'2020-07-31' 排班開始日期 , '06:00:00' 排班開始時(shí)間 ,??'2020-07-31'? ?排班結(jié)束日期,'06:00:00' 排班結(jié)束時(shí)間,'2020-07-31 09:00:00'工作安排開始時(shí)間,'2020-07-31 17:00:00'工作安排結(jié)束時(shí)間,'2020-07-31 17:30:00' 打卡開始時(shí)間 from dual? ?--7月31日下班打卡
union all
select '劉文'??姓名,? ?'2020-08-01' 排班開始日期 ,'06:00:00' 排班開始時(shí)間 ,??'2020-08-01'??排班結(jié)束日期,'06:00:00' 排班結(jié)束時(shí)間,'2020-08-01 09:00:00'工作安排開始時(shí)間,'2020-08-01 17:00:00'工作安排結(jié)束時(shí)間,'2020-08-01 08:30:00' 打卡開始時(shí)間 from dual??--8月1日上班打卡
union all
select??'劉文'??姓名,? ?'2020-08-01' 排班開始日期 , '06:00:00'排班開始時(shí)間 ,??'2020-08-01'??排班結(jié)束日期,'06:00:00' 排班結(jié)束時(shí)間,'2020-08-01 09:00:00'工作安排開始時(shí)間,'2020-08-01 17:00:00'工作安排結(jié)束時(shí)間,'2020-08-01 17:30:00' 打卡開始時(shí)間 from dual? ?--8月1日下班打卡
)
select * from a
總結(jié)
以上是生活随笔為你收集整理的oracle 的跨天查询,考勤跨天如何统计 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 输出当月日历_java 实现打
- 下一篇: MySQL建表两个单引号报错_极客起源