[firebase-br] RES: sql de caixa
Zottis
zottissistemas em brturbo.com.br
Qui Maio 28 14:28:29 -03 2009
Eu utilizo assim:
tenho a tabela Caixa
e fa;co o SQL
Select T2.Data,
coalesce( Sum (T2.Entrada), 0) as Entradas
,coalesce( Sum (T2.saida), 0 ) as saidas
,(select coalesce( Sum (C1.Entrada ), 0 ) from caixa C1 where
C1.data <= T2.data and C1.deletado = 'N' )
- (select coalesce( Sum (C1.Saida ), 0 ) from caixa C1 where
C1.data <= T2.data and C1.deletado = 'N' ) as Saldo
,(select coalesce( Sum (C1.Entrada ), 0 ) from caixa C1 where
C1.data < T2.data and C1.deletado = 'N' )
- (select coalesce( Sum (C1.Saida ), 0 ) from caixa C1 where
C1.data < T2.data and C1.deletado = 'N' ) as SaldoAnterior
>From Caixa T2
Where T2.DELETADO = 'N' and T2.Data = :DataInicial
Group By T2.Data
Order by T2.Data
assim ele me da os totais por dia
depois tenho outro select caixa ......where data = :Data linkado ao
datasource desse primeiro SQL
ta redondinho.
obs só lembre dos índices.
senão ficará lento mesmo.
Zottis(TeamFB Users)
Zottis Sistemas - 2009 Ano XII
Programação Delphi/PHP/Firebird/MySQL
"Um homem só tem o direito de olhar
a um outro de cima para baixo, quando
vai ajuda-lo a levantar-se".
Gabriel Garcia Marquez
----- Original Message -----
From: "LuisFireVB" <luisfirevb em gmail.com>
To: "'FireBase'" <lista em firebase.com.br>
Sent: Thursday, May 28, 2009 2:19 PM
Subject: [firebase-br] RES: sql de caixa
Olha não sou de fazer ainda SQL na mão, uso ferramentas para isso, mas ....
A princípio seu conceito está equivocado. Você está fazendo 4 selects e não
3, ainda dois são repetidos, ou seja, faz duas vezes a mesma coisa.
Você tem que fazer só dois selects, um somando débitos e outro créditos,
passa as duas informações para rotina que chamou e dentro dela faz o
calculo, crédito - débito = saldo atual.
Outro detalhe muito importante, para esse cálculo você precisa do saldo
inicial do período calculado. Uma forma de fazer isso é ter esse valor
gravado numa tabela auxiliar de saldos parciais onde terá os lançamentos por
data, assim saberá os saldos em cada dia, e querendo. Dessa forma porderá em
muitas consultas abrir mão de varrer a tabela de lançamentos para realizar
esse conta com períodos grandes.
Uma dica seria na tabela auxiliar, contabilizada diariamente ou em tempo
real para cada lançamento, ter os campos créditos e débitos também
totalizados, assim não teria de calcular a cada vez, bastaria pegar os
totais na data desejada.
OBS: Agora se quiser totalizar o valor de créditos ou débitos num perioso
(seja, semanal ou mensal) basta somar os lançamentos consolidados da tabela
auxiliar e não da tabela de lançamentos individuais.
Acho que ao longo do tempo veria que a performance não se alterará, mas
dessa forma que fez verá o problema aumentar ao longo do tempo (mais
lançamentos para percorrer).
Luis
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Marcio Da Silva Ereno
Enviada em: quinta-feira, 28 de maio de 2009 13:39
Para: lista em firebase.com.br
Assunto: [firebase-br] sql de caixa
Ola pessoal, eu fiz uma tabela de caixa tipo livro caixa com DEBITO e
CREDITO e fiz um sql para calcular o total de CREDITO e DEBITO e SALDO
mais a tabela tem uns 500 lançamentos e quando eu entro na tela demora para
calcular o sql que estou usando e o seguinte:
select
(select coalesce(sum(valo_cai),0) from caixa inner join historico on
codi_his=hist_cai where tipo_his='C' and data_cai=:PDATA) as Credito,
(select coalesce(sum(valo_cai),0) from caixa inner join historico on
codi_his=hist_cai where tipo_his='D' and data_cai=:PDATA) as Debito,
(select coalesce(sum(valo_cai),0) from caixa inner join historico on
codi_his=hist_cai where tipo_his='C')-
(select coalesce(sum(valo_cai),0) from caixa inner join historico on
codi_his=hist_cai where tipo_his='D') as saldo
from caixa
group by 1,2,3
o primeiro calcula o CREDITO no periodo
o segundo calcula o DEBITO no periodo
o terceiro calcula o CREDITO - DEBITO para calcular o sado final
Alguem poderia me ajudar dando alguma dica como melhorar isso?
grato
Marcio Ereno
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista