[원본데이터]
pk |
gubun |
std |
edt |
1 |
사과 |
20100101 |
20101231 |
1 |
사과 |
20110101 |
20111231 |
1 |
사과 |
20120101 |
20121231 |
1 |
배 |
20130101 |
20131231 |
1 |
배 |
20140101 |
20141231 |
1 |
사과 |
20150101 |
20151231 |
1 |
사과 |
20160101 |
20161231 |
2 |
사과 |
20100101 |
20131231 |
2 |
사과 |
20140101 |
20141231 |
2 |
배 |
20150101 |
20161231 |
* pk별 구분이 바뀌는 구간에 시작일 ~ 종료일을 구하고자 합니다.
* pk별 일자의 중복구간은 없습니다.
* pk별 구분값은 중복되어 나올수 있으며 바로 이어지지 않는경우 별도의 시작일 ~ 종료일로 인식되게 하려고 합니다.
[결과 데이터]
pk |
gubun |
std |
edt |
1 |
사과 |
20100101 |
20121231 |
1 |
배 |
20130101 |
20141231 |
1 |
사과 |
20150101 |
20161231 |
2 |
사과 |
20100101 |
20141231 |
2 |
배 |
20150101 |
20161231 |
[샘플데이터]
WITH T AS
(
SELECT '1' pk, '사과' gubun, '20100101' sdt, '20101231' edt FROM DUAL UNION ALL
SELECT '1' pk, '사과' gubun, '20110101' sdt, '20111231' edt FROM DUAL UNION ALL
SELECT '1' pk, '사과' gubun, '20120101' sdt, '20121231' edt FROM DUAL UNION ALL
SELECT '1' pk, '배' gubun, '20130101' sdt, '20131231' edt FROM DUAL UNION ALL
SELECT '1' pk, '배' gubun, '20140101' sdt, '20141231' edt FROM DUAL UNION ALL
SELECT '1' pk, '사과' gubun, '20150101' sdt, '20151231' edt FROM DUAL UNION ALL
SELECT '1' pk, '사과' gubun, '20160101' sdt, '20161231' edt FROM DUAL UNION ALL
SELECT '2' pk, '사과' gubun, '20100101' sdt, '20131231' edt FROM DUAL UNION ALL
SELECT '2' pk, '사과' gubun, '20140101' sdt, '20141231' edt FROM DUAL UNION ALL
SELECT '2' pk, '배' gubun, '20150101' sdt, '20161231' edt FROM DUAL
)
SELECT *
FROM T
|