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