출역년월 출역시작 출역종료
200603 20060330 20060330
200604 20060430 20060430
200605 20060530 20060530
200607 20060730 20060730
이게 원본데이터구요 제가 뽑으려는 데이터는 보험가입일,해지일 입니다
출역시작한 날짜가 보험 가입일입니다 출역을 해서 연속으로 근무하면 보험이 해지가 되지않는데
한달이라도 건너뛰면 바로 해지되고 그다음 첫 출역일자가 보험 가입일로 되어야 합니다
출역년월 보험가입 보험해지
200603 20060330
200604 20060330
200605 20060330 20060601
200607 20060730
200608 20060730
.
.
.
first_value로 최초 보험일은 가져올수있는데 중간에 끊겼을때 그다음 가입일을 못가져오겠습니다..
너무 길이글고 조잡해서 죄송합니다 ㅠㅠ
with t as ( select '200603' yyyymm, '20060330' sdt, '20060330' edt from dual union all select '200604' yyyymm, '20060430' sdt, '20060430' edt from dual union all select '200605' yyyymm, '20060530' sdt, '20060530' edt from dual union all select '200607' yyyymm, '20060730' sdt, '20060730' edt from dual ) select yyyymm, min(sdt) over(partition by gp order by sdt) dt from ( select yyyymm, sdt, edt , sum(decode(premon, thismon,0,1)) over(order by yyyymm) gp from ( select yyyymm, sdt, edt ,trunc(add_months(to_date(lag(sdt) over (order by sdt),'yyyymmdd'),1),'mm') premon ,trunc(to_date(sdt,'yyyymmdd'),'mm') thismon from t ) )