Database/Oracle

[Oracle]LAG, LEAD

  • -
반응형

LAG

LAG 함수는 데이터의 몇 번째 이전 행의 값을 가져옵니다.

사용법은 다음과 같습니다.(LAG, LEAD 함수가 동일합니다)

LAG(Column, N, '') / LEAD(Column, N, '')
첫 번째 인자는 비교할 컬럼
두 번째 인자는 몇 번째 이전(또는 이후) 행의 값을 가져올지. 입력하지 않을 경우, Default = 1
세 번째 인자는 첫 번째(또는 LEAD의 경우 마지막) 행의 값이 Null이 조회될 때 바꿔줄 값

 

예제를 하나 만들어보겠습니다.

빵 유통기한을 오름차순으로 정렬하고 각각의 빵 유통기한과 해당 빵 이전에 유통기한 날짜를 확인해보겠습니다.

WITH TESTDB AS(
SELECT 1001 BNUM, '크림빵' BNAME, '20190301' BYMD FROM DUAL UNION ALL
SELECT 1002 BNUM, '초코빵' BNAME, '20190305' BYMD FROM DUAL UNION ALL
SELECT 1003 BNUM, '식빵' BNAME, '20190315' BYMD FROM DUAL UNION ALL
SELECT 1005 BNUM, '소보로빵' BNAME, '20190405' BYMD FROM DUAL UNION ALL
SELECT 1006 BNUM, '소세지빵' BNAME, '20190510' BYMD FROM DUAL
)
SELECT BNUM, BNAME, BYMD, LAG(BYMD) OVER(ORDER BY BYMD) 
FROM TESTDB
 

 

2번째 이전 행의 값과 Null 값은 X로 표시해보겠습니다.

SELECT BNUM, BNAME, BYMD, LAG(BYMD, 2, 'X') OVER(ORDER BY BYMD) 
FROM TESTDB

 

LEAD

LEAD 함수는 데이터의 몇 번째 이후 행의 값을 가져옵니다.

사용은 아래와 같습니다. LAG와 마찬가지로 인자를 설정할 수 있습니다.

WITH TESTDB AS(
SELECT 1001 BNUM, '크림빵' BNAME, '20190301' BYMD FROM DUAL UNION ALL
SELECT 1002 BNUM, '초코빵' BNAME, '20190305' BYMD FROM DUAL UNION ALL
SELECT 1003 BNUM, '식빵' BNAME, '20190315' BYMD FROM DUAL UNION ALL
SELECT 1005 BNUM, '소보로빵' BNAME, '20190405' BYMD FROM DUAL UNION ALL
SELECT 1006 BNUM, '소세지빵' BNAME, '20190510' BYMD FROM DUAL
)
SELECT BNUM, BNAME, BYMD, LEAD(BYMD) OVER(ORDER BY BYMD) 
FROM TESTDB

 


+피드백은 언제나 환영입니다 :)

 

반응형

'Database > Oracle' 카테고리의 다른 글

[Oracle]날짜 영문 표기  (0) 2021.01.14
[Oracle]계층형 쿼리(START WITH ~ CONNECT BY PRIOR)  (0) 2019.11.21
[Oracle]공백 제거  (0) 2018.09.28
[Oracle]CASE문  (0) 2018.09.02
[Oracle]CUBE  (0) 2018.08.22
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.