아래 쿼리는 b_column으로 분할한 후, c_column으로 정렬하고, 이전 row 포함하는 윈도우 절 입니다.
rows 1 preceding하게 되면 윈도윙결과셋에는 현재로우와 이전로우 두 로우가 구성 됩니다.
따라서 현재 로우와 바로 이전 로우 중 높은 값을 리턴합니다.
MAX(a_column) OVER(PARTITION BY b_column
ORDER BY c_column
ROWS 1 PRECEDING)
그런데 위에 있는 윈도우절에서 PRECEDING대신 FOLLOWING 사용시 에러가 발생합니다.
ROWS 1 FOLLOWING 구문에서 왜 에러가 발생하는 걸까요?
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING 으로 변경하면
의도한 대로(현재로우와 다음로우가 윈도윙결과셋이 됨) 잘 작동 하더군요.
PRECEDING은 암묵적으로 현재로우를 포함하고
FOLLOWING은 항상 명시적으로 시작점을 정의해야 하는게 스펙인건가요?
https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm
windowing_clause 부분 보세요. 그게 문법입니다.