- 카테고리:
- 윈도우 함수 구문 및 사용법 (순위 지정) 
LEAD¶
테이블 자체를 조인하지 않으면서 동일 결과 세트의 이후 행에 있는 데이터에 액세스합니다.
- 참고 항목:
구문¶
LEAD ( <expr> [ , <offset> , <default> ] ) [ { IGNORE | RESPECT } NULLS ]
  OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
인자¶
- expr
- 반환할 문자열 식입니다. 
- offset
- 값을 가져오는 현재 행의 앞쪽 행 수입니다. 예를 들어 - offset이 2는 행 간격이 2인- expr값을 반환합니다.- 음수 오프셋을 설정하는 것은 LAG 함수를 사용하는 것과 같은 효과를 가집니다. - 기본값은 1입니다. - IGNORE NULLS가 지정된 경우, 최댓값은 1,000,000입니다.
- default
- 오프셋이 윈도우 범위를 벗어날 때 반환할 식입니다. 유형이 - expr과 호환되는 모든 식을 지원합니다.- 기본값은 NULL입니다. 
- { IGNORE | RESPECT } NULLS
- expr에 NULL 값이 포함된 경우 NULL 값을 무시할지 또는 적용할지 여부입니다.- IGNORE NULLS는 오프셋 행을 계산할 때 식이 NULL 로 평가되는 모든 행을 제외합니다.
- RESPECT NULLS는 오프셋 행을 계산할 때 식이 NULL 로 평가되는 모든 행을 포함합니다.
 - 기본값: - RESPECT NULLS
사용법 노트¶
- PARTITION BY 절은 FROM 절에 의해 생성된 결과 세트를 함수가 적용되는 파티션으로 분할합니다. 자세한 내용은 윈도우 함수 구문 및 사용법 섹션을 참조하십시오. 
- ORDER BY 절은 각 파티션 내의 데이터를 정렬합니다. 
예¶
CREATE OR REPLACE TABLE sales(
  emp_id INTEGER,
  year INTEGER,
  revenue DECIMAL(10,2));
INSERT INTO sales VALUES
  (0, 2010, 1000),
  (0, 2011, 1500),
  (0, 2012, 500),
  (0, 2013, 750);
INSERT INTO sales VALUES
  (1, 2010, 10000),
  (1, 2011, 12500),
  (1, 2012, 15000),
  (1, 2013, 20000);
INSERT INTO sales VALUES
  (2, 2012, 500),
  (2, 2013, 800);
SELECT emp_id,
       year,
       revenue,
       LEAD(revenue) OVER (PARTITION BY emp_id ORDER BY year) - revenue AS diff_to_next
  FROM sales
  ORDER BY emp_id, year;
+--------+------+----------+--------------+
| EMP_ID | YEAR |  REVENUE | DIFF_TO_NEXT |
|--------+------+----------+--------------|
|      0 | 2010 |  1000.00 |       500.00 |
|      0 | 2011 |  1500.00 |     -1000.00 |
|      0 | 2012 |   500.00 |       250.00 |
|      0 | 2013 |   750.00 |         NULL |
|      1 | 2010 | 10000.00 |      2500.00 |
|      1 | 2011 | 12500.00 |      2500.00 |
|      1 | 2012 | 15000.00 |      5000.00 |
|      1 | 2013 | 20000.00 |         NULL |
|      2 | 2012 |   500.00 |       300.00 |
|      2 | 2013 |   800.00 |         NULL |
+--------+------+----------+--------------+
CREATE OR REPLACE TABLE t1 (
  c1 NUMBER,
  c2 NUMBER);
INSERT INTO t1 VALUES
  (1,5),
  (2,4),
  (3,NULL),
  (4,2),
  (5,NULL),
  (6,NULL),
  (7,6);
SELECT c1,
       c2,
       LEAD(c2) IGNORE NULLS OVER (ORDER BY c1)
  FROM t1;
+----+------+------------------------------------------+
| C1 | C2   | LEAD(C2) IGNORE NULLS OVER (ORDER BY C1) |
|----+------+------------------------------------------|
|  1 |  5   |                                        4 |
|  2 |  4   |                                        2 |
|  3 | NULL |                                        2 |
|  4 |  2   |                                        6 |
|  5 | NULL |                                        6 |
|  6 | NULL |                                        6 |
|  7 |  6   |                                     NULL |
+----+------+------------------------------------------+