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.
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>