조회결과 내가원하는 조건의 위아래 값을 알고싶을때가있다.
예를들어 게시글의 상세보기중 이전글,다음글을 현재 페이지에서 링크걸떄, 이전글과 다음글의 글번호를 알고싶다고하면
어떻게 가져올수있을까?
LAG
LAG함수를 사용하면 이전ROW의 데이터를 알 수 있다.
사용법은 아래와같다.
LAG(REGION_ID) OVER (ORDER BY REGION_ID)
아래 테이블의 각 행마다 이전행의 데이터를 가져오고싶을떄, LAG를 사용하여 가져올 수 있다.
SELECT * FROM REGIONS ORDER BY REGION_ID | cs |
SELECT REGION_ID,
REGION_NAME,
LAG(REGION_ID) OVER (ORDER BY REGION_ID) 이전행ID,
LAG(REGION_NAME) OVER (ORDER BY REGION_ID) 이전행NAME
FROM REGIONS
ORDER BY REGION_ID
각 ROW마다 이전 REGION_ID를 가져왔다, 이때 내가원하는 행의 이전로우만 알고싶다면 아래와같이 서브쿼리를 사용하면 된다.
SELECT *
FROM(
SELECT REGION_ID,
REGION_NAME,
LAG(REGION_ID) OVER (ORDER BY REGION_ID) 이전행ID,
LAG(REGION_NAME) OVER (ORDER BY REGION_ID) 이전행NAME
FROM REGIONS
ORDER BY REGION_ID
)
WHERE REGION_ID = '3'
LEAD
LEAD함수를 사용하면 다음ROW의 데이터를 알 수 있다.
사용법은 아래와같다.
LEAD(REGION_ID) OVER (ORDER BY REGION_ID)
LAG와 같은 방법으로 사용 할 수 있다.
SELECT REGION_ID, REGION_NAME, LEAD(REGION_ID) OVER (ORDER BY REGION_ID) 다음행ID, LEAD(REGION_NAME) OVER (ORDER BY REGION_ID) 다음행NAME FROM REGIONS ORDER BY REGION_ID | cs |
각행의 다음 값을 가져올 수 있다.
내가원하는 ROW의 다음값 가져오기.
SELECT * FROM( SELECT REGION_ID, REGION_NAME, LEAD(REGION_ID) OVER (ORDER BY REGION_ID) 다음행ID, LEAD(REGION_NAME) OVER (ORDER BY REGION_ID) 다음행NAME FROM REGIONS ORDER BY REGION_ID ) WHERE REGION_ID = '3' | cs |