Obsidian/Recognition/Programing/Oracle/LAG, LEAD 함수 (위아래 행간 컬럼 비교).md

1009 B

#Oracle

LAG(expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause) LEAD(expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause)

LAG 함수 : 이전 행의 값을 리턴 LEAD 함수 : 다음 행의 값을 리턴

expr : 대상 컬럼명

offset : 값을 가져올 행의 위치 기본값은 1, 생략가능 default : 값이 없을 경우 기본값, 생략가능 partition_by_clause : 그룹 컬럼명, 생략가능 order_by_clause : 정렬 컬럼명, 필수

  • 기본사용
SELECT empno
     , ename
     , job
     , sal
     , LAG(empno) OVER(ORDER BY empno)  AS empno_prev
     , LEAD(empno) OVER(ORDER BY empno) AS empno_next
     , LEAD(empno, 2, 9999) OVER(ORDER BY empno) AS empno_next2
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')
  • 그룹컬럼 기준
SELECT empno
     , ename
     , job
     , sal
     , LAG(job) OVER(PARTITION BY job ORDER BY empno) AS empno_prev
  FROM emp 
 WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN')