Pegar Saldo Anterior

27/11/2012

0

Antes de mais nada, digo que já procurei demais no google, e achei até muitos tópicos sobre o tema, mas nenhum me deu êxito.
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

Rodrigo Barra

Responder

Posts

27/11/2012

Rodolpho Silva

Colega,

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
Responder

27/11/2012

Rodrigo Barra

Obrigado pela ajuda Rodolfo.

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
Responder

25/12/2018

Ailton

Obrigado pela ajuda Rodolfo.

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?
Responder

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar