[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