Página 1 de 1

Como desacumular valores

Enviado: Sex, 08 Jan 2021 12:21 pm
por thrrent
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!

Re: Como desacumular valores

Enviado: Seg, 11 Jan 2021 3:27 pm
por dr_gori
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

Re: Como desacumular valores

Enviado: Sex, 27 Ago 2021 4:49 pm
por thrrent
Show irmão, acabei bolando uma solução sem recursividade e deu certo, mas essa dica é muito boa. Obrigado