행 비교 분석 함수: LAG, LEAD, FIRST_VALUE, LAST_VALUE
"전월 대비 증감", "직전 주문과의 간격", "부서 최고 급여자와의 차이"처럼 다른 행의 값을 현재 행 옆에 붙이는 조회는 셀프 조인 없이 윈도 함수로 끝납니다. 이 레슨은
LAG·LEAD로 앞뒤 행을,FIRST_VALUE·LAST_VALUE로 그룹의 처음과 끝 값을 가져오는 방법과,LAST_VALUE의 기본 프레임 함정, 상태 변화 행 추출과 연속 구간 묶기를 다룹니다.
1. 왜 배우는가
월별 매출 표에서 "지난달보다 얼마나 늘었나"를 구하려면 각 행이 이전 행의 값을 알아야 합니다. 예전에는 같은 테이블을 자기 자신과 조인해서 월 = 월 - 1 로 붙였습니다. 조인 조건이 어긋나면 행이 사라지거나 중복되고, 쿼리도 길어집니다.
LAG(컬럼) 은 정렬된 순서에서 바로 앞 행의 값을, LEAD(컬럼) 은 바로 뒤 행의 값을 돌려줍니다. 행 수는 그대로이고 옆에 컬럼이 하나 늘 뿐입니다. 전월 대비, 직전 이벤트와의 시간 간격, 상태가 바뀐 시점 찾기가 모두 이 함수 하나로 풀립니다.
FIRST_VALUE·LAST_VALUE 는 그룹의 첫 행·마지막 행 값을 가져옵니다. 다만 LAST_VALUE 는 프레임 기본값 때문에 오류 없이 엉뚱한 값을 내므로, 프레임을 이미 익힌 뒤에 써야 안전합니다.
참고순위 함수는 고급 01, 집계 함수의
OVER와 윈도 프레임은 고급 02 에서 다뤘습니다. 이 레슨은 프레임 설명을 반복하지 않고,LAST_VALUE함정에서만 고급 02 의 기본 프레임 규칙을 다시 씁니다.