[firebase-br] RES: sql de caixa

LuisFireVB luisfirevb em gmail.com
Qui Maio 28 14:19:18 -03 2009


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





Mais detalhes sobre a lista de discussão lista