- 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:
Sintaxe¶
LEAD ( <expr> [ , <offset> , <default> ] ) [ { IGNORE | RESPECT } NULLS ] OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
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 valorexpr
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áusulaORDER 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 |
+--------+------+----------+--------------+
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 |
+----+------+------------------------------------------+