00시00분 ~ 06시00분까지는 2
06시00분 ~ 22시00분까지는 1.5
22시00분 ~ 00시00분까지는 2
이 기준으로 계산되어야 하는데
문제는 시작 22시00분 종료 01시30분 이렇게 되면
하루가 넘기는 부분이라 계산이 쉽지가 않네요
관련쿼리 있을까요?
원본 샘플 자료와 그에 따른 결과표를 보여주세요. 시작 종료가 어떤 형태로 관리되는지? 어떤 자료형인지? 등등
데이터는
근무일자 20180619 시작 1930 종료 0230
이렇게 들어가 있구요
결과표는
근무시간 1930 2200 2.5시간 계산시간 2.5*1.5 = 3.75
근무시간 2230 0230 4시간 계산시간 4*2 = 8
합계 6.5시간 계산시간 11.75시간
이렇게 나와야 합니다.
WITH data_t AS ( SELECT 1 idx, '20180619' dt, '1930' stm, '0230' etm FROM dual ) , code_t AS ( SELECT 0*60 s, 6*60 e, 2.0 v FROM dual UNION ALL SELECT 6*60, 22*60, 1.5 FROM dual UNION ALL SELECT 22*60, 30*60, 2.0 FROM dual UNION ALL SELECT 30*60, 46*60, 1.5 FROM dual ) SELECT a.idx, a.dt, a.stm, a.etm , SUM((LEAST(a.e, b.e) - GREATEST(a.s, b.s)) * b.v) / 60 hours FROM (SELECT idx, dt, stm, etm , SUBSTR(stm, 1, 2)*60 + SUBSTR(stm, 3, 2) s , SUBSTR(etm, 1, 2)*60 + SUBSTR(etm, 3, 2) + CASE WHEN etm < stm THEN 24*60 ELSE 0 END e FROM data_t ) a , code_t b WHERE a.s < b.e AND a.e > b.s GROUP BY a.idx, a.dt, a.stm, a.etm ;