Pegar Saldo Anterior
27/11/2012
0
estou fazendo um Fluxo de Caixa, no seguinte esquema:
DATA ENTRADAS SAIDAS SALDO SALDO ANTERIOR SALDO ACUMULADO
25/11/12 R$100 R$50 R$50 R$0,00 R$50
26/11/12 R$200 R$100 R$100
R$200 etc
O problema é pegar o Saldo Anterior. O modo que cheguei mais perto foi por meio de SubQuery. Mas esta subquery está pegando o mesmo valor de Saldo para todas linhas e não o saldo Anterior propriamente dito.
Pegando o Exemplo acima, o Saldo Anterior nas 3 linhas está saindo como R$100 e não R$0 R$50 R$100
Ou seja, a query está pegando apenas um valor, e não está tipo fazendo "um Laço de Repetição" como deveria.
select SUM(VALORENTRADA_FLUXOCAIXA) as Entradas, SUM(VALORSAIDA_FLUXOCAIXA) as Saidas, DATA_FLUXOCAIXA, (SUM(VALORENTRADA_FLUXOCAIXA) - SUM(VALORSAIDA_FLUXOCAIXA)) as Saldo, //a parte de cima está funcionando corretamente (select (SUM(VALORENTRADA_FLUXOCAIXA) - SUM(VALORSAIDA_FLUXOCAIXA)) from FLUXOCAIXA WHERE data_fluxocaixa = (SELECT MAX(data_fluxocaixa - 1) from FLUXOCAIXA) ) as Saldo_Anterior //na parte acima, ele pega o penultimo valor do Saldo, mas o problema é q coloca este mesmo valor em todas as linhas, e não o Anterior de cada linha. Devia fazer tipo uma repetição para pegar um valor para cada linha from FLUXOCAIXA where data_fluxocaixa between :data1 and :data2 group by data_fluxocaixa //e por ultimo agrupa por data, o que invibializa de colocar Codigo anterior por exemplo, pra conseguir o ultimo registro
Os campos Entradas, Saidas, Saldo e Saldo Anterior são "virtuais" ou seja, não são fisicos na tabela Fluxo de Caixa.
Se alguem puder me ajudar agradeço.
Rodrigo Barra
Posts
27/11/2012
Rodolpho Silva
Veja se ajuda:
SELECT SUM(VALORENTRADA_FLUXOCAIXA) AS Entradas ,SUM(VALORSAIDA_FLUXOCAIXA) AS Saidas ,DATA_FLUXOCAIXA ,(SUM(VALORENTRADA_FLUXOCAIXA) - SUM(VALORSAIDA_FLUXOCAIXA)) AS Saldo FROM FLUXOCAIXA inner join (SELECT data_fluxocaixa, (SUM(VALORENTRADA_FLUXOCAIXA) - SUM(VALORSAIDA_FLUXOCAIXA)) FROM FLUXOCAIXA group by data_fluxocaixa) Saldo_Anterior on Saldo_Anterior.data_fluxocaixa < FLUXOCAIXA.data_fluxocaixa WHERE data_fluxocaixa BETWEEN : data1 AND : data2 GROUP BY data_fluxocaixa
27/11/2012
Rodrigo Barra
Quebrei a cabeça a tarde inteira, e consegui fazer de um jeito que já consigo o Saldo Acumulado de uma vez, sem o Saldo Anterior.
Vou postar abaixo, porque pode vir ajudar alguem.
select SUM(e.VALORENTRADA_FLUXOCAIXA) as Entradas, SUM(e.VALORSAIDA_FLUXOCAIXA) as Saidas, e.DATA_FLUXOCAIXA, (SUM(VALORENTRADA_FLUXOCAIXA) - SUM(VALORSAIDA_FLUXOCAIXA)) as Saldo, (SELECT SUM(f.VALORENTRADA_FLUXOCAIXA) - SUM(f.VALORSAIDA_FLUXOCAIXA) FROM FLUXOCAIXA f WHERE f.data_fluxocaixa <= e.data_fluxocaixa and f.data_fluxocaixa between :data1 and :data2) AS Saldo_Acumulado from FLUXOCAIXA e where e.data_fluxocaixa between :data3 and :data4 group by e.data_fluxocaixa
25/12/2018
Ailton
Quebrei a cabeça a tarde inteira, e consegui fazer de um jeito que já consigo o Saldo Acumulado de uma vez, sem o Saldo Anterior.
Vou postar abaixo, porque pode vir ajudar alguem.
select SUM(e.VALORENTRADA_FLUXOCAIXA) as Entradas, SUM(e.VALORSAIDA_FLUXOCAIXA) as Saidas, e.DATA_FLUXOCAIXA, (SUM(VALORENTRADA_FLUXOCAIXA) - SUM(VALORSAIDA_FLUXOCAIXA)) as Saldo, (SELECT SUM(f.VALORENTRADA_FLUXOCAIXA) - SUM(f.VALORSAIDA_FLUXOCAIXA) FROM FLUXOCAIXA f WHERE f.data_fluxocaixa <= e.data_fluxocaixa and f.data_fluxocaixa between :data1 and :data2) AS Saldo_Acumulado from FLUXOCAIXA e where e.data_fluxocaixa between :data3 and :data4 group by e.data_fluxocaixa
Está show
Estou com um problema que quando fico debitando para depois fazer o processo que gera o saldoanterior ele repeti as linhas que estava vazias.
Pode ajudar?
26/12/2018
Emerson Nascimento
SELECT *, (SaldoAnterior + Entradas - Saidas) Saldo FROM ( SELECT COALESCE((SELECT SUM(FC2.VALORENTRADA_FLUXOCAIXA - FC2.VALORSAIDA_FLUXOCAIXA) FROM FLUXOCAIXA FC2 WHERE FC2.data_fluxocaixa BETWEEN :data1 AND :data2 AND FC2.data_fluxocaixa < FC.data_fluxocaixa),0) SaldoAnterior, FC.DATA_FLUXOCAIXA, SUM(FC.VALORENTRADA_FLUXOCAIXA) AS Entradas, SUM(FC.VALORSAIDA_FLUXOCAIXA) AS Saidas FROM FLUXOCAIXA FC WHERE FC.data_fluxocaixa BETWEEN :data1 AND :data2 GROUP BY FC.data_fluxocaixa ) fcaixa
Clique aqui para fazer login e interagir na Comunidade :)