POINT_HISTORY 테이블
번호 등록일 득점포인트 총합포인트 포인트종류 상품명
1 2018-06-01 50 50 A 사과
2 2018-06-02 50 100 A 바나나
3 2018-06-03 50 150 A 귤
4 2018-06-04 50 200 A 당근
5 2018-06-05 50 250 A 오랜지
6 2018-06-06 70 320 B 보너스 포인트
7 2018-06-07 -100 220 G 포인트 사용
8 2018-06-08 50 170 A 감자
위와같이 데이터가 쌓이고 있습니다.
검색하고자하는 조건이
1. 가장 최근의 총합포인트 기준으로 여기서는 8번의 170점
2. 해당 총합포인트 170점이 모두소진될 수 있는 포인트 종류 A의 최근항목 순 검색입니다.
여기서는 8번,5번,4번,3번의 상품명 검색되어야하는 조건입니다.
조회결과값
번호 등록일 상품명
8 2018-06-08 감자
5 2018-06-05 오랜지
4 2018-06-04 당근
3 2018-06-03 귤
쿼리문 작성에 고수님들의 도움을 구합니다.
WITH point_history AS ( SELECT 1 번호, '2018-06-01' 등록일, 50 득점포인트, 50 총합포인트, 'A' 포인트종류, '사과' 상품명 FROM dual UNION ALL SELECT 2, '2018-06-02', 50, 100, 'A', '바나나' FROM dual UNION ALL SELECT 3, '2018-06-03', 50, 150, 'A', '귤' FROM dual UNION ALL SELECT 4, '2018-06-04', 50, 200, 'A', '당근' FROM dual UNION ALL SELECT 5, '2018-06-05', 50, 250, 'A', '오랜지' FROM dual UNION ALL SELECT 6, '2018-06-06', 70, 320, 'B', '보너스 포인트' FROM dual UNION ALL SELECT 7, '2018-06-07', -100, 220, 'G', '포인트 사용' FROM dual UNION ALL SELECT 8, '2018-06-08', 50, 170, 'A', '감자' FROM dual ) SELECT * FROM (SELECT 번호, 등록일, 득점포인트, 총합포인트, 포인트종류, 상품명 , FIRST_VALUE(포인트종류) OVER(ORDER BY 번호 DESC) 포인트종류1 , FIRST_VALUE(총합포인트) OVER(ORDER BY 번호 DESC) 총합포인트1 , SUM(득점포인트) OVER(PARTITION BY 포인트종류 ORDER BY 번호 DESC) 득점포인트s FROM point_history ) WHERE 포인트종류 = 포인트종류1 AND 총합포인트1 > 득점포인트s - 득점포인트 ;