38 lines
1009 B
Markdown
38 lines
1009 B
Markdown
|
#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 : 정렬 컬럼명, 필수
|
||
|
|
||
|
- 기본사용
|
||
|
```SQL
|
||
|
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')
|
||
|
```
|
||
|
|
||
|
- 그룹컬럼 기준
|
||
|
```SQL
|
||
|
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')
|
||
|
```
|