이전글, 다음글 LAG, LEAD
게시판 구현을 하다보면 이전글, 다음글 기능을 사용해야하는데, 이를 sql에서 해결 할 수 있다.
아래 기본적인 LAG와 LEAD의 형태를 보자.
LAG( expr, offset, default ) OVER (PARTITION BY)
LEAD( expr, offset, default ) OVER (PARTITION BY)
//expr : 이 부분에 쓴 값을 기준으로 이전 로우 값반환
//offset : offset에 지정한 로우가 존재하지 않을 경우, default에 쓴 값을 입력
* 참고로 LAG는 분석함수라고 불린다.
사용 방법은 예시를 확인하자.
* 예시
아래 예시는 employees테이블의 각 영업 사원에 대해 직전 고용 된 직원의 급여를 제공하는 예이다.
SELECT last_name, hire_date, salary,
LAG (salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM 직원
job_id = 'PU_CLERK';
LAST_NAME HIRE_DATE SALARY PREV_SAL
------------------------- --------- ---------- - --------
Khoo 18-MAY-95 3100 0
Tobias 24-JUL-97 2800 3100
Baida 24-DEC-97 2900 2800
Himuro 15-NOV-98 2600 2900
Colmenares 10-AUG-99 2500 2600
두번째줄, hire_date를 오름차순으로 놓고 salary column을 기준으로 바로 이전 로우값(1)을 가져오겠다.
그리고 이전 값을 가져왔는데, 이전 로우 값이 존재하지 않을 경우 0을 집어넣겠다.
=> LAG(salary, 1, 0)
그래서 khoo를 기준으로 봤을 때, 이전 로우 값이 존재하지 않기에 PREV_SAL에 0이 들어간 것을 볼 수 있다.
LAG로 값가져오는 순서 Colmenares -> Himuro -> Baida -> Tobias -> Khoo -> ???
참고 링크
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions070.htm
도움이 되셨으면 공감과 광고 한번 씩 눌러주시면 감사합니다!!