아래와 같이 시작일, 종료일이 마구잡이로 비율이 들어 오는 로그테이블이 있습니다.
이중 마지막에 들어온 데이타를 기준으로 원하는 기간의 비율을 뽑고자 합니다.
저는 몇일째 고민하고 있는데, 생각보다 쉽지 않네요.
고수님들 조언 부탁드리겠습니다.
1. 아래 데이타 구조에서 기간내에 비율을 구하고 싶습니다.
WITH TMP AS (
SELECT 1 AS SEQ, '20131201' AS START_DT, '20140131' AS END_DT, 20 AS RATE FROM DUAL UNION ALL
SELECT 2, '20140101', '20140131', 30 FROM DUAL UNION ALL
SELECT 3, '20140101', '20140228', 20 FROM DUAL UNION ALL
SELECT 4, '20131201', '20140115', 40 FROM DUAL
) SELECT * FROM TMP;
SEQ |
시작일 |
종료일 |
비율 |
1 |
20131201 |
20140131 |
20 |
2 |
20140101 |
20140131 |
30 |
3 |
20140101 |
20140228 |
20 |
4 |
20131201 |
20140115 |
40 |
원하는 결과는 아래와 같습니다.
- 기간이 겹칠시에는 SEQ가 큰게 우선입니다.
- 20140101 ~ 20140131의 데이타를 구할 경우에는
SEQ |
시작일 |
종료일 |
비율 |
4 |
20140101 |
20140115 |
40 |
3 |
20140116 |
20140131 |
20 |
2. 아래 데이타 구조에서 기간내에 비율을 구하고 싶습니다.
WITH TMP AS (
SELECT 1 AS SEQ, '20131201' AS START_DT, '20140131' AS END_DT, 20 AS RATE FROM DUAL UNION ALL
SELECT 2, '20140101', '20140131', 30 FROM DUAL UNION ALL
SELECT 3, '20140101', '20140228', 20 FROM DUAL UNION ALL
SELECT 4, '20131201', '20140115', 40 FROM DUAL UNION ALL
SELECT 5, '20131201', '20140115', 15 FROM DUAL UNION ALL
SELECT 6, '20140111', '20140120', 25 FROM DUAL UNION ALL
SELECT 7, '20140116', '20140228', 30 FROM DUAL
) SELECT * FROM TMP;
SEQ |
시작일 |
종료일 |
비율 |
1 |
20131201 |
20140131 |
20 |
2 |
20140101 |
20140131 |
30 |
3 |
20140101 |
20140228 |
20 |
4 |
20131201 |
20140115 |
40 |
5 |
20131201 |
20140115 |
15 |
6 |
20140111 |
20140120 |
25 |
7 |
20140116 |
20140228 |
30 |
원하는 결과는 아래와 같습니다.
- 기간이 겹칠시에는 SEQ가 큰게 우선입니다.
- 20140101 ~ 20140131의 데이타를 구할 경우에는
SEQ |
시작일 |
종료일 |
비율 |
5 |
20140101 |
20140110 |
15 |
6 |
20140111 |
20140115 |
25 |
7 |
20140116 |
20140131 |
30 |
|