Como fazer sql p/ recuperar saldo anterior
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
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
Curtidas 0
Respostas
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.
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
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]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
GOSTEI 0
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
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
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
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
22/04/2005
ok.
fico no aguardo
fico no aguardo
GOSTEI 0
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.
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
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
22/04/2005
Colegas ... continuo aguardando uma ajuda. Quem poderá me ajudar??
GOSTEI 0
Gandalf.nho
22/04/2005
Tente o comando ROWS ao invés de TOP
GOSTEI 0