Fórum Contruir Sql em FireBird 1.5 #54911
23/01/2006
0
Estou com um problema aqui, tenho uma tabela em FireBird 1.5
Com a seguinte estrutura:
CON_CODIGO : Código da Contas
SAL_DATASALDO : Data do Saldo
SAL_SALDO : Valor do Saldo
LOJA : Empresa do Saldo
Esta tabela e utilizada para armazenar o Saldo Anterior de um sistema de caixa, sempre que tem uma movimentação eu verifico se naquele dia e naquela conta já existe um lançamento caso exista só atualizo ou se não crio um novo.
Listar o Saldo anterior informando a conta e muito fácil, pois coloco a conta e peço a ultima data menor que a data informada.
O problema e o seguinte agora eu preciso acumular o saldo anterior de todas as contas, vou passar uma data base e o saldo que tiver a data menor e o saldo anterior.
Como faço para pegar apenas a ocorrência mais próxima da data informada de toas às contas e somar?
Processo que estou usando para uma unica conta :
SELECT SAL_SALDO, SAL_DATASALDO FROM CAX_SALDOS
WHERE CON_CODIGO = :CODCONTA
AND SAL_DATASALDO = (SELECT MAX(SAL_DATASALDO) FROM
CAX_SALDOS WHERE SAL_DATASALDO < :DT AND CON_CODIGO
= :CODCONTA)
INTO :VALOR, :DTSALDO;
Desde já agradeço
Hugo Fabrício
Hugofab
Curtir tópico
+ 0Posts
23/01/2006
Emerson Nascimento
SELECT CX1.SAL_SALDO, CX1.SAL_DATASALDO FROM CAX_SALDOS CX1 WHERE CX1.SAL_DATASALDO = (SELECT MAX(CX2.SAL_DATASALDO) FROM CAX_SALDOS CX2 WHERE CX2.SAL_DATASALDO <= :_DT AND CX2.CON_CODIGO = CX1.CON_CODIGO) INTO :VALOR, :DTSALDO
Gostei + 0
24/01/2006
Hugofab
Não estou conseguindo rodar o código que vc me passou fiz a alteração na procedure mas quando executo pelo sistema esta dando um erro:
´Multiple rowns in Select´
e não retorna nada tentei rodar o Sistema e no Ib Expert e não funcionou !
Desde já agradeço
Hugo Fabrício
Gostei + 0
24/01/2006
Rodolpho123
SELECT CX1.SAL_SALDO, CX1.SAL_DATASALDO FROM CAX_SALDOS CX1 WHERE CX1.SAL_DATASALDO IN (SELECT MAX(CX2.SAL_DATASALDO) FROM CAX_SALDOS CX2 WHERE CX2.SAL_DATASALDO <= :_DT AND CX2.CON_CODIGO = CX1.CON_CODIGO) INTO :VALOR, :DTSALDO
Gostei + 0
25/01/2006
Hugofab
Fiz a alteração, mas a mensagem continua a mesma!
Outra duvida esta sentença vai acumular o saldo pois não tem nenhuma função sum !
desde já agradeço a atenção
Hugo Fabrício
Gostei + 0
25/01/2006
Emerson Nascimento
sua tabela tem somente esses campos?
Gostei + 0
25/01/2006
Emerson Nascimento
eu testei essa instrução e funcionou:
SELECT SUM(CX1.SAL_SALDO) FROM CAX_SALDOS CX1 WHERE CX1.SAL_DATASALDO = (SELECT MAX(CX2.SAL_DATASALDO) FROM CAX_SALDOS CX2 WHERE CX2.SAL_DATASALDO <= :_DT AND CX2.CON_CODIGO = CX1.CON_CODIGO)
ela retorna o valor acumulado de todas as contas, assumindo a data mais próxima da data informada.
como explicado antes, dessa forma não será possível retornar uma data precisa na instrução. o máximo que poderia ser feito nesse sentido seria retornar um max(CX1.SAL_DATASALDO), que retornaria a maior data avaliada na instrução (mas pelo que você precisa, não vejo como essa informação seria relevante)
Gostei + 0
26/01/2006
Hugofab
Utilizando o exemplo que vc me passou funcionou perfeitamente,
muito obrigando !
Hugo Fabrício
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)