안녕하세요
한달동안 당직 선날중에서 동일날 당직을 2개 서면 오래근무한 시간만 구하고, 발생건수도 한건으로 구하려고 합니다.
데이터는 아래와 같습니다.
사번 | 당직일 | 당직형태 | 시작시간 | 종료시간 |
11 | 20160206 | 30 | 0800 | 1400 |
11 | 20160206 | 40 | 0800 | 1800 |
11 | 20160213 | 30 | 0800 | 1400 |
11 | 20160213 | 40 | 0900 | 1900 |
11 | 20160220 | 30 | 1200 | 1700 |
제가원하는 데이터는 아래와 같이 나와야 합니다.
사번 | 당직일 | 시작시간 | 종료시간 | 발생건수 |
11 | 20160206 | 0800 | 1800 | 1 |
11 | 20160213 | 0900 | 1900 | 1 |
11 | 20160220 | 1200 | 1700 | 1 |
도움 부탁드립니다...
with t (eno, dt, status, stime, etime) as ( select '11', '20160206', 30, '0800', '1400' from dual union all select '11', '20160206', 40, '0800', '1800' from dual union all select '11', '20160213', 30, '0800', '1400' from dual union all select '11', '20160213', 40, '0900', '1900' from dual union all select '11', '20160220', 30, '1200', '1700' from dual ) select eno, dt, stime, etime,rn from ( select eno, dt, stime, etime,row_number() over(partition by eno,dt order by gb desc) rn from ( select eno, dt, stime, etime , to_date(etime,'hh24mi') - to_date(stime,'hh24mi') gb from t) ) where rn = 1;