개발자의 길

[oracle] 이전글 다음글 분석함수(LAG,LEAD) 본문

3. DB

[oracle] 이전글 다음글 분석함수(LAG,LEAD)

자르르 2014. 8. 29. 14:09


현재 행의 이전 또는 이후의 행 값을 들고와야 할 때. 아래의 펑션을 이용하면 됨.

 

/* LEAD() OVER() FUNCTION
   현재 행의 다음 데이터에 접근.
   ACCESS_ROW_INDEX : 현재 행 기준 N 번째 행의 값을 들고 옴.
   1 : 현재 행의 바로 다음 행 값.
   2 : 현재 행의 2번째 행 값.
   ...
*/
-- QUERY

SELECT LEAD([COLUMN_NANE], [ACCESS_ROW_INDEX]) OVER(ORDER BY [COLUMN_NAME])
  FROM [TABLE_NAME];


/* LAG() OVER() FUNCTION
   현재 행의 이전 데이터에 접근.
*/

SELECT LAG([COLUMN_NANE], [ACCESS_ROW_INDEX]) OVER(ORDER BY [COLUMN_NAME])
  FROM [TABLE_NAME];

 

 

Ex)

-- 다음글

SELECT A.*, LEAD(A.COLUMN1, 1) OVER(ORDER BY A.COLUMN2) AS NEXT_VALUE

    FROM TABLE A;

 

COLUMN1  COLUMN2

1               A

2               B

3               C

 

의 데이터가 존재하는 경우 위 쿼리를 실행하면,

 

COLUMN1  COLUMN2 NEXT_VALUE

1               A             2

2               B             3

3               C             (NULL)

 

--ACCESS_ROW_INDEX 가 2 인 경우

COLUMN1  COLUMN2 NEXT_VALUE

1               A             3

2               B             (NULL)

3               C             (NULL)

 

--이전글

SELECT A.*, LAG(A.COLUMN1, 1) OVER(ORDER BY A.COLUMN2) AS PREV_VALUE

    FROM TABLE A;

 

COLUMN1  COLUMN2 PREV_VALUE

1               A             (NULL)

2               B             1

3               C             2



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments