본문으로 바로가기

[Oracle]오라클 위,아래ROW값 가져오기(LAG,LEAD)

category DB\SQL 2019. 3. 12. 22:41

조회결과 내가원하는 조건의 위아래 값을 알고싶을때가있다.


예를들어 게시글의 상세보기중 이전글,다음글을 현재 페이지에서 링크걸떄, 이전글과 다음글의 글번호를 알고싶다고하면


어떻게 가져올수있을까?




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
cs



각 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'
cs





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