Como fazer sql p/ recuperar saldo anterior

Delphi

22/04/2005

Uso Interbase6.5 - dbexpress -delphi 7
Possuo uma tabela chamada SALDOS com saldo anterior onde tenho os campos
Sequencia,data, valor, fabrica
Necessito recuperar apenas um registro do saldo anterior via SQL, onde
tenho várias datas c/saldo. Apenas a Anterior ao período Informado.
Tenho tentado mas não consegui. Será que algum dos nossos nobres colegas poderiam me ajudar?

Até +
Sds/Hélio


Helio Nascimento

Helio Nascimento

Curtidas 0

Respostas

Robsons

Robsons

22/04/2005

Caro Helio !!!
Primeiro passo seria descobrir a data anterior a primeira data no periodo informado, depois com uma instrucao Sql buscar na tabela o registro desejado...
( Select valor from saldos
where data = :<dataanterior>)

[]s,
Robson.


GOSTEI 0
Helio Nascimento

Helio Nascimento

22/04/2005

É impossível descobrir a data anterior, pois há diversos registros da mesma fábrica, porém no Select é recuperado todos os registros da fábrica, com saldos atuais. Ficaria mais ou menos assim:

For Select Data_Saldo, Valor_Saldo from SALDOS

Where (cod_fabrica = :pCod_Fabrica) and (Data_Saldo < :pData_Movimento)

order by Data_Saldo DESC

INTO :Data, :Valor

do
Begin
if (:Data=null) then data= :Data_Movimento - 1;
if (:Valor = null) then valor = 0;
suspend;
end


é Retornado todos os registros menor que o movimento atual, a questão é descobrir apenas o primeiro registro que está ordenado inversamente.Explico melhor. Suponhamos os registros
:Cod_Fabrica = 3 - :Data_Movimento = ´25/04/05´

Na Tabela Saldos tenhos os Registros

Fábrica - Data - Saldo
3 05/04/05 - 20,00
3 10/04/05 - 85,00
3 18/04/05 - 15,00

Esta STORE PROCEDURE - dentro do Interbase traz todos os registros em ordem
inversa assim sendo:
Fabrica - Data Saldo
3 18/04/05 15,00
3 10/04/05 85,00
3 05/04/05 20,00

Eu só preciso que ela me retorne apenas um registro ou seja :
Fábrica Data Saldo
3 18/04/05 15,00

Se eu der um EXIT após o SUSPEND eu saio da Procedure e não é o
caso pois logo abaixo tenho outros processamentos recuperando outros
registros que juntando com o Saldo que acumula em uma variável, fára
a continuação do que preciso. Será que me fiz entender?
O Negócio é descobrir como trazer apenas um registro e contirnuar o processamento dentro desta STORE PROCEDURE.
Gratos - Hélio



[/code][/list]


GOSTEI 0
Robsons

Robsons

22/04/2005

Olá !!!

Modifiquei sua consulta como mostro abaixo, tente e veja se funciona.ok ?

usei o top <no de linhas> para trazer a qtde de linhas desejada..

abraços...

Robson.


For Select top 1 Data_Saldo, Valor_Saldo from SALDOS

Where (cod_fabrica = :pCod_Fabrica) and (Data_Saldo < :pData_Movimento)

order by Data_Saldo DESC


GOSTEI 0
Helio Nascimento

Helio Nascimento

22/04/2005

Caro Robsons

Obrigado por ter respondido a minha questão.Irei testá-la e se der certo ou não volto ao assunto até porque outros colegas poderão fazer pesquisas e achar resposta satisfatória p/seus problemas. Não sabia deste comando TOP

Saudações/Hélio


GOSTEI 0
Robsons

Robsons

22/04/2005

ok.
fico no aguardo


GOSTEI 0
Helio Nascimento

Helio Nascimento

22/04/2005

Robsons . Não Funcionou. o Interbase não aceita este comando TOP.
Acho que este é para outro Banco de Dados. Se Tiver alguma outra ideia estarei no aguardo.

Sds/Hélio
Ps.Ah ia me esquecendo, teria uma outra ideia. Mas não sei como implementá-la. Seria confecçionar outra Store Procedure e Chamá-la de dentro desta que estou com problemas. Explico melhor: Seria fazer uma SQL igual mas com um exit após o Suspend; assim retornaria a 1º registro que seria repassado para a SQL que estou processando. Agora não sei como chamar uma Store Procedure dentro de outra.


GOSTEI 0
Helio Nascimento

Helio Nascimento

22/04/2005

Colegas continuo aguardando alguma sugestão para este meu problema, será que alguem do forum poderia me ajudar.??


GOSTEI 0
Helio Nascimento

Helio Nascimento

22/04/2005

Colegas ... continuo aguardando uma ajuda. Quem poderá me ajudar??


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/04/2005

Tente o comando ROWS ao invés de TOP


GOSTEI 0
POSTAR