제가 익수지 않은 업무를 하다보니 처음에 문의를 잘못드린듯합니다.;;
다시한번 문의드리겠습니다.;;
일자별 매출과 수금 데이터가 있습니다.
일자 매출 수금 매출-수금 기일
2017.01.01 100 0 100
2017.02.01 100 50 50
2017.03.01 100 210 -110 2017.01.01
2017.04.01 100 200 -100 2017.03.01
2017.05.01 100 50 50
2017.06.01 0 100 -100 2017.05.01
기일 데이터를 가져오고싶습니다.
여기서 기일은 매출-수금이 마이너스 일경우
이전일자의 매출을 역순으로 더하여 +가 되는 최초일입니다.
예를들어 2017-03-01 의 경우 -110원입니다.
2월의 매출을 더해도 -10이 되기때문에
1월의 매출까지 더해야 +90이 되기때문에 날짜가 2017-01-01이 됩니다.
데이터 베이스는 오라클 9i를 사용하고 있습니다.
감사합니다 ^^
이상한 요구조건 이네요?
- 매출만 가지고 따진다는게 이상합니다.
- 수금도 함께 따져봐야 하는게 아닐런지?
일단 요구조건 대로 만들어 보긴 했지만...
- 이게 실제로 사용이 될지? 실제로 유의미한 자료가 될지? 의문이네요?
WITH t AS ( SELECT '2017.01.01' dt, 100 v1, 0 v2 FROM dual UNION ALL SELECT '2017.02.01', 100, 50 FROM dual UNION ALL SELECT '2017.03.01', 100, 210 FROM dual UNION ALL SELECT '2017.04.01', 100, 200 FROM dual UNION ALL SELECT '2017.05.01', 100, 50 FROM dual UNION ALL SELECT '2017.06.01', 0, 100 FROM dual ) , tmp AS ( SELECT dt , v1 , v2 , v1 - v2 v3 , SUM(v1) OVER(ORDER BY dt DESC) v4 FROM t ) SELECT a.dt , a.v1 , a.v2 , a.v3 , MAX(b.dt) v5 FROM tmp a LEFT OUTER JOIN tmp b ON a.dt > b.dt AND a.v3 < 0 AND b.v4 - a.v4 + a.v3 >= 0 GROUP BY a.dt, a.v1, a.v2, a.v3 ORDER BY a.dt ;