개발하자

[ORACLE] LAG(이전값), LEAD(다음값) 함수 본문

DATABASES/ORACLE︲TIBERO

[ORACLE] LAG(이전값), LEAD(다음값) 함수

개발리미 2023. 12. 22. 13:58
728x90

안녕하세요

블로그나 카페 등 게시글 하단에 이전글, 다음글을 쉽게 볼 수 있도록 표시가 되어있는 경우를 많이 봤는데요

LAG()와 LEAD() 함수를 사용하면 쉽게 구현할 수 있습니다.

LAG() 함수는 이전 행의 값을 리턴하고, LEAD()함수는 다음 행의 값을 리턴합니다.

 


기본 사용법
-- 이전값
LAG(대상컬럼 ,가져올행위치 ,NULL일때 기본값) OVER (그룹컬럼명 정렬컬럼명)
-- 다음값
LEAD(대상컬럼 ,가져올행위치 ,NULL일때 기본값) OVER (그룹컬럼명 정렬컬럼명)

대상컬럼, 정령컬럼명은 필수이며,

가져올 행 위치, NULL일때 기본값, 그룹컬럼명은 생략가능합니다.

 

LAG() 함수

이전 값 가져오기

SELECT OPEN_NO, PROGRAM_NAME,
LAG(OPEN_NO) OVER (ORDER BY OPEN_NO DESC) AS PREV_OPEN_NO,
LAG(PROGRAM_NAME) OVER (ORDER BY OPEN_NO DESC) AS PREV_PROGRAM_NAME
FROM PROGRAM_TABLE
ORDER BY OPEN_NO DESC;

현재 행을 중심으로 OPEN_NO값과 PROGRAM_NAME의 이전 값을 가져옵니다.

 

 

LEAD() 함수

다음 값 가져오기

SELECT OPEN_NO, PROGRAM_NAME,
LEAD(OPEN_NO) OVER (ORDER BY OPEN_NO DESC) AS NEXT_OPEN_NO,
LEAD(PROGRAM_NAME) OVER (ORDER BY OPEN_NO DESC) AS NEXT_PROGRAM_NAME
FROM PROGRAM_TABLE
ORDER BY OPEN_NO DESC;

현재 행을 중심으로 OPEN_NO값과 PROGRAM_NAME의 다음 값을 가져옵니다.

 

LAG() + LEAD()

이전 값, 다음 값 가져오기

SELECT OPEN_NO, PROGRAM_NAME,
LAG(OPEN_NO) OVER (ORDER BY OPEN_NO DESC) AS PREV_OPEN_NO,
LAG(PROGRAM_NAME) OVER (ORDER BY OPEN_NO DESC) AS PREV_PROGRAM_NAME,
LEAD(OPEN_NO) OVER (ORDER BY OPEN_NO DESC) AS NEXT_OPEN_NO,
LEAD(PROGRAM_NAME) OVER (ORDER BY OPEN_NO DESC) AS NEXT_PROGRAM_NAME
FROM PROGRAM_TABLE
ORDER BY OPEN_NO DESC;

LAG()와 LEAD()는 함께 사용 가능합니다.

 

 


공부하면서 유용했던 부분 메모겸 공유하고자 끄적입니다.

고쳐야하는 부분있다면 댓글 남겨주시면 수정하겠습니다.

행복한 하루 보내세요 (❁´◡`❁)

 

 

728x90
반응형