고수님들 첨부된 파일에 나와 있듯이..
작업자 시간에서 휴식시간을 빼주고 싶은데 어떻게 하면 되죠?
혹시 저같은 고민 하신분 계시나요?
아무리 생각해도 로직 및 쿼리가 떠오르질 않내요.
* 내용
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을 해줘야 하는데 쿼리 및 로직을 어떻게
해야 될지 도무지 모르겠습니다. 혹시 아이디어나 제가 모르는 쿼리등 있으시면 알려주세요.
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분까지는 작업 시작과 종료 없다고 생각하고 작성했습니다.