Ambas as funções tem como sua sintaxe parecidas:
LAG (value_expression [,offset] [,DEFAULT]) OVER ([query_partition_clase] order_by_clause) LEAD (value_expression [,offset] [,DEFAULT]) OVER ([query_partition_clase] order_by_clause)
LAG
Esta é uma função analitica. Que provem o acesso a mais que um registro de uma tabela ao mesmo tempo sem precisar fazer um join na própria tabela self join. A busca irá retornar uma ou mais registros anteriores a da possição atual (current).
value_expression - É a expressão que irá retornar da query.
offset - É opcional, caso não seja informar o padrão é 1. Onde este é o campo que podes informar quantos registros deverá retornar.
default - É opcional, caso não seja informado o valor será null.
query_partition_clase - É opcional pois se tiveres particionamento podes colocar a clausula de particionamento .
order_by_clause - É opcional pois desta forma irá informar a ordem que queres pegar a informação anterior.
Exemplo para simplificar:
Para fins estatisticos podemos verificar quanto em estoque temos que ter de um determinado produto ou tivemos que ter entre um mês e outro.
DROP TABLE estoque; CREATE TABLE estoque (produto CHAR(1), dat DATE, qtde NUMBER); INSERT INTO estoque SELECT 'A',TRUNC(sysdate-((DBMS_RANDOM.VALUE(1,90))*30/10)),TRUNC(DBMS_RANDOM.VALUE(1,100)) FROM dual CONNECT BY LEVEL < = 100; INSERT INTO estoque SELECT 'B',TRUNC(sysdate-((DBMS_RANDOM.VALUE(1,90))*30/10)),TRUNC(DBMS_RANDOM.VALUE(1,100)) FROM dual CONNECT BY LEVEL <= 100; INSERT INTO estoque SELECT 'C',TRUNC(sysdate-((DBMS_RANDOM.VALUE(1,90))*30/10)),TRUNC(DBMS_RANDOM.VALUE(1,100)) FROM dual CONNECT BY LEVEL <= 100; COMMIT; SELECT produto,TO_CHAR(dat, 'FMYYYY/MM', 'nls_date_language=portuguese') mes, SUM(qtde) soma_normal, SUM(qtde) + NVL(LAG(SUM(qtde)) over(ORDER BY TO_CHAR(dat, 'FMYYYY/MM', 'nls_date_language=portuguese')), 0) ACUMULADO FROM estoque WHERE produto ='A' GROUP BY (produto,TO_CHAR(dat, 'FMYYYY/MM', 'nls_date_language=portuguese')) ORDER BY produto,TO_CHAR(dat, 'FMYYYY/MM', 'nls_date_language=portuguese'); PRODUTO MES SOMA_NORMAL ACUMULADO A 2008/1 514 514 A 2008/2 1073 1587 A 2008/3 805 1878 A 2008/4 287 1092 A 2008/5 633 920 A 2008/6 355 988 A 2008/7 236 591 A 2008/8 625 861 A 2008/9 457 1082
LEAD
Simplesmente é o contrario do LAG, ele irá pegar o proximo valor.
0