시간 관련 계산 문의드립니다. 0 8 1,026

by lgxj20 [2017.07.21 09:39:59]


법정근무시간 1일8시간

휴게시간 4시간당 30분

법정근무시간 이후시간은 연장시간

야간근로 22시 ~ 익일6시까지

 

이런조건이 있는데요 이런조건으로 근무시간,연장시간,야간근로시간을 계산하는걸 만드려고하는데요

 

ex)

13:00 ~ 22:00 까지근무하면 원래는 총근무시간이9시간인데 4시간마다 30분씩 휴게시간이 생기므로 근무시간만 8시간이되고요

16:00~23:00 까지근무하면 총근무시간은 6시간인데 4시간만다 30분 휴게시간이 생기므로 근무시간이 5.5 가되면 22시이후 근무가 1시간생기므로 야간근로시간 1시간이 되고요

10:00 ~ 22:00 까지 근무이면 근무시간 8시간에 연장시간 1시간 

이런식으로 계산이 되는걸 구현하려고 합니다.

by 마농 [2017.07.21 09:47:41]

근무시간이 자정을 넘기기도 하나요? (예 : 19:00 ~ 01:00)
'10:00' 으로 표현하신 시간이 실제 저장형태 인가요?


by lgxj20 [2017.07.21 10:15:11]

컬럼은 일자 : '20170720'

         시간 : '10'

         분 : '00' 

이렇게 따로 저장되어있습니다.


by 마농 [2017.07.21 11:08:57]

16:00~23:00 에 대한 설명이 좀 이상한데..
총근무시간이 6시간 이라고 하셨는데? 7시간 아닌가요?
혹시? 야간근로시간 1시간을 뺐기 때문인가요?

법정근무와 연장근무는 배타적 관계인 듯 보이는데...(서로 겹치지 않음)
야간근무는 근무시간과 서로 겹치는게 아닌가 싶어서요.
근무시간중에도 야간근무 할 수 있고
연장근무중에도 야간근무 할 수 있고
(근무시간/연장시간) 과 야간시간이 겹치는 경우
시간계산을 양쪽에 다하는게 맞을까요?
(근무시간/연장시간) 쪽에서 야간시간을 제외시키고 야간시간에만 카운트 하는게 맞을까요?


by lgxj20 [2017.07.21 11:17:20]

총근무시간은 7시간인데 

근무시간은 6시간 - (4시간에 30분 휴식) = 5.5 시간

야간근로시간 1시간

이렇게 됩니다.


by 마농 [2017.07.21 11:23:23]

근무시간에서 야간시간이 제외된다고 보면 되나요?


by lgxj20 [2017.07.21 11:37:42]

(근무시간/연장시간) 쪽에서 야간시간을 제외시키고 야간시간에만 카운트 하는게 맞습니다.


by 마농 [2017.07.21 11:33:30]
WITH t AS
(
SELECT 1 empno, '20170720' dt, '13' s_hh, '00' s_mi, '22' e_hh, '00' e_mi FROM dual
UNION ALL SELECT 2, '20170720', '16', '00', '23', '00' FROM dual
UNION ALL SELECT 3, '20170720', '10', '00', '22', '00' FROM dual
UNION ALL SELECT 4, '20170720', '19', '00', '01', '00' FROM dual
UNION ALL SELECT 5, '20170720', '22', '00', '07', '00' FROM dual
)
SELECT empno, dt
     , s_hh, s_mi, e_hh, e_mi
     , SUM(DECODE(gb, 1, work_tm - night_tm   )) 근무시간
     , SUM(DECODE(gb, 2, work_tm - night_tm, 0)) 연장시간
     , SUM(night_tm) 야간시간
  FROM (SELECT empno, dt
             , s_hh, s_mi, e_hh, e_mi
             , CASE WHEN lv < 3 THEN 1 ELSE 2 END gb
             , s, e
             , (e - s) * 24 AS work_tm
             , GREATEST(0, (LEAST(e, TRUNC(s)+30/24) - GREATEST(s, TRUNC(s)+22/24)) * 24)
             + GREATEST(0, (LEAST(e, TRUNC(s)+ 6/24) - GREATEST(s, TRUNC(s)- 2/24)) * 24)
               AS night_tm
          FROM (SELECT empno, dt
                     , s_hh, s_mi, e_hh, e_mi
                     , lv
                     , s + 4.5/24 * (lv - 1) s
                     , LEAST(s + 4.5/24 * lv - 0.5/24, e) e
                  FROM (SELECT empno, dt
                             , s_hh, s_mi, e_hh, e_mi
                             , TO_DATE(s_hh||s_mi, 'hh24mi') s
                             , TO_DATE(e_hh||e_mi, 'hh24mi')
                             + CASE WHEN s_hh||s_mi > e_hh||e_mi THEN 1 ELSE 0 END e
                          FROM t
                        )
                     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL < 9)
                 WHERE lv <= CEIL((e - s)*24/4.5)
                )
        )
 GROUP BY empno, dt, s_hh, s_mi, e_hh, e_mi
 ORDER BY empno, dt
;

 


by lgxj20 [2017.08.01 15:21:37]

마농님 여기서 4시간마다 30분 휴식이 조건이 더있는데요

법정근무,연장,야간

이 세가지구분휴게시간이 나눠지는 조건을 추가하려는데요

ex ) 14 : 00 ~ 23 : 00 일때는 현재는 근무시간 7.5 / 연장 0 / 야간 0.5 이렇게 나오게 되어있는데

                                      근무시간 7 / 연장 0 / 야간 1 이런식으로 나와야 합니다.

어떤식으로 수정해야 될까요?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입