Categorias:

Funções de janela (relacionada à classificação)

LEAD

Acessa os dados em uma linha subsequente no mesmo conjunto de resultados sem precisar unir a tabela a si mesma.

Consulte também:

LAG

Sintaxe

LEAD ( <expr> [ , <offset> , <default> ] ) [ { IGNORE | RESPECT } NULLS ] OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
Copy

Argumentos

expr

A expressão de cadeia de caracteres a ser retornada.

offset

O número de linhas para frente a partir da linha atual da qual se obtém um valor. Por exemplo, um offset de 2 retorna o valor expr com um intervalo de 2 linhas.

Observe que a definição de um offset negativo tem o mesmo efeito que a utilização da função LAG.

O padrão é 1. Se IGNORE NULLS for especificado, o máximo é 1.000.000.

default

A expressão a retornar quando o offset sai dos limites da janela. Suporta qualquer expressão cujo tipo seja compatível com expr.

O padrão é NULL.

Notas de uso

  • Quando a cláusula IGNORE NULLS é definida, qualquer linha cuja expressão seja avaliada para NULL não é inclusa quando as linhas de deslocamento são contadas. Se { IGNORE | RESPECT } NULLS não for especificado, o padrão é RESPECT NULLS.

  • A cláusula PARTITION BY divide o conjunto de resultados produzido pela cláusula FROM em partições às quais a função é aplicada. Para obter mais informações sobre isto e a cláusula ORDER BY, consulte Funções de janela.

  • A cláusula ORDER BY ordena os dados dentro de cada partição.

Exemplos

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 |
+--------+------+----------+--------------+
Copy
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 |
+----+------+------------------------------------------+
Copy