Funções analiticas LAG/LEAD

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.

Funções analiticas
LEAD
LAG


Nenhum comentário ainda.

Deixe um comentário

Quebras de linha e parágrafo automáticas, seu email nunca será mostrado, HTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(obrigatório)

(obrigatório)