SQL 윈도우함수 관련 질문이요 0 1 892

by 찐감자 [2016.09.07 20:18:32]


⦁ 다음의 결과가 나오도록 빈칸에 알맞은 함수를 쓰시오
[문제] 다음과 같이 월별 금액을 가진 집합에서 해당 월을 기준으로 이전 3개월간 금액 합계를 출력하는 SQL을 완성하세요.
 원본 리스트
WITH t AS
(
SELECT '201601' yyyymm, 100 amt FROM dual
UNION ALL SELECT '201602', 200 FROM dual
UNION ALL SELECT '201603', 300 FROM dual
UNION ALL SELECT '201604', 400 FROM dual
UNION ALL SELECT '201605', 500 FROM dual
)
SELECT * FROM t
;
<원본테이블>
YYYYMM AMT
2016   01    100
2016   02    200
2016   03    300
2016   04    400
2016   05    500

<결과테이블>
YYYY  MM AMT AMT_PRE3
2016     01  100 
2016     02  200        100
2016     03  300        300
2016     04  400        600
2016     05  500        900

SELECT yyyymm
     , amt
     , __________(amt) OVER(ORDER BY TO_DATE(yyyymm,'yyyymm')
                RANGE BETWEEN INTERVAL '3' MONTH _____________
                        AND INTERVAL '1' MONTH __________) amt_pre3
FROM t;

 

여기서 SUM,PRECEDING,FOLLOWING 이 답으로 되어있는데

MM -4 => 1,2,3월 더한 값 MM-5 => 2,3,4월 더한 값

이런 식이잖아요 그럼 '3' MONTH PRECEDING AND '1'MONTH PRECEDING 이 되어야 하는거

아닌가요? '1' MONTH FOLLOWING 이면 4월이라 칠때 1,2,3월 + 5월치 더한거라고 생각하는데..

헷갈리네요. 그리고 INTERVAL 은 뭔가요??? 답변 부탁드려요

by 마농 [2016.09.08 09:20:10]

네. 둘다 preceding 이 맞습니다.
interval 은 시간 간격을 의미합니다.
Following 가 왔다면? 4월의 결과는 (1+2+3+5) 가 아니라 (1+2+3+4+5) 입니다.

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