작업 시간 구하기 및 휴식시간 빼주기-쿼리 및 로직 아시는 분 0 1 2,122

by 강기호 [2015.04.14 18:46:53]


고수님들 첨부된 파일에 나와 있듯이.. 
작업자 시간에서 휴식시간을 빼주고 싶은데 어떻게 하면 되죠?
혹시 저같은 고민 하신분 계시나요? 
아무리 생각해도 로직 및 쿼리가 떠오르질 않내요.

* 내용
1.작업시간(아래처럼 주야 시간이 섞일경우 참 난감하내요...)

  - 작업시간 구하는데는 문제가 없습니다. 허나 작업시간 구간내 휴계시간을 어떻게 구해서 빼주죠 에효 하루종일 고민만....


  - 시작시간 : 14/04/01 19:00 ~ 14/04/02 10:30 까지 작업 --> 15.5 시간 작업
               --------------   --------------
                WorkBeginDate   WorkEndDate

2.휴식시간 : 휴식시간을 관리하는 테이블이 있음(휴식시작시간 ~ 휴식종료시간)
  - 매일 10:00 ~ 10:10 까지 10분간 휴식임 --> 10/60 = 0.16 분 휴식
         -----   -----
         RSTime  RETime 

* 여기서 고민이내요. 작업시간 구간내 휴식시간을 구해서 15.5 - 0.16을 해줘야 하는데 쿼리 및 로직을 어떻게
해야 될지 도무지 모르겠습니다. 혹시 아이디어나 제가 모르는 쿼리등 있으시면 알려주세요.
 

by jkson [2015.04.15 08:25:34]
with t as
(
select to_date('2014-04-01 19:00:00','yyyy-mm-dd hh24:mi:ss') stm
      ,to_date('2014-04-02 10:30:00','yyyy-mm-dd hh24:mi:ss') etm
  from dual
)
select (etm - stm) * 24  -- 총시간
    -  (case when stm < trunc(stm,'dd') + 10/24 then 0.16 -- 첫째날 시작시간이 10시 이전이면 10분 휴식시간 빼기
            else 0
       end
     + case when etm > trunc(etm,'dd') + 10/24 then 0.16 -- 마지막날 종료시간이 10시 이후이면 10분 휴식시간 빼기
            else 0
       end 
     + (trunc(etm,'dd') - trunc(stm,'dd') - 1) * 0.16 ) tottime -- 중간날짜 10분 휴식시간 빼기
  from t

10시~10시10분까지는 작업 시작과 종료 없다고 생각하고 작성했습니다.

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