쿼리문 문의드립니다. 0 1 126

by 미리네별 [SQL Query] [2018.06.15 01:19:19]


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    귤


쿼리문 작성에 고수님들의 도움을 구합니다.

by 마농 [2018.06.15 08:26:42]
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 - 득점포인트
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입