Como desacumular valores

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
thrrent
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Dom, 29 Jan 2012 5:28 pm
Localização: Rio de Janeiro

Amigos, boa tarde.

Estou com uma necessidade onde eu tenho valores acumulados no decorrer de meses em uma tabela, porém preciso "desacumular" esses valores, acho que deve existir algum modo recursivo de se fazer isso com sql. Alguém já fez algo parecido?

Jan: Acumulado = 10; Desacumulado = 10 (Resultado do primeiro mês ainda não acumulado)
Fev: Acumulado = 20; Desacumulado = 10 ( Fev - Jan )
Mar: Acumulado = 50; Desacumulado = 30 ( Mar - Fev )
Abr: Acumulado = 49; Desacumulado = -1 ( Abril - Mar )

Desde já, muito obrigado!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pode usar funções analíticas pra isso.
Veja: download/funcoes_ANALITICAS.html

No seu caso, eu criei essa tabela de exemplo:

Selecionar tudo

create table thomas_test
(mês number
, acumulado number)

begin
insert into thomas_test values (1,10);
insert into thomas_test values (2,20);
insert into thomas_test values (3,50);
insert into thomas_test values (4,49);
end;
Aí eu fiz essa query:

Selecionar tudo

select 
  mês
, acumulado
, lag(acumulado,1,null) over (order by mês) anterior
, acumulado - lag(acumulado,1,null) over (order by mês) desacumulado
from thomas_test

/
       mês  ACUMULADO   ANTERIOR DESACUMULADO
---------- ---------- ---------- ------------
         1         10            
         2         20         10           10
         3         50         20           30
         4         49         50           -1

:-o
thrrent
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Dom, 29 Jan 2012 5:28 pm
Localização: Rio de Janeiro

Show irmão, acabei bolando uma solução sem recursividade e deu certo, mas essa dica é muito boa. Obrigado
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 31 visitantes