Recalcular campo especifico baseado em outro campo em tabela

Delphi

27/03/2009

Olá a rodos!!


Sou programador e estou iniciando no Delphi. Preciso fazer um programa no mesmo que recalcule um valor de acordo com o periodo e valor encontrados em outros 2 campos de uma mesma tabela, por exemplo


data Entrada Saida Valor Unitario Preço de Custo

26/03/2009 100 (null) R$10,00 R$10,00
26/03/2009 (null) 10 R$20,00 (Null)
27/03/2009 50 (null) R$5,00 R$5,00
27/03/2009 (null) 10 R$20,00 (Null)

Segundo a tabela acima, preciso que seja atualizados os preços de custo aonde teve saida, mas ele deve pegar sempre o atualizado. Isso deve ser feito na base de dados em diversos itens e sempre pegando da entrada anterior (no exemplo aciuma, dia 26/03 o item vendido teria o custo de R$10,00 e no dia 27/03 teria o custo de R$5,00).
Tentei via SQL mas não deu certo. Algume tem alguma sugestão de como fazer para que eu possa solucionar o caso?

Obrigado a todos!


Dastyler

Dastyler

Curtidas 0

Respostas

Rudá

Rudá

27/03/2009

UPDATE Teste
SET Custo = (SELECT TOP 1 T.Custo
FROM Teste T
WHERE Saida IS NULL and
Custo IS NOT NULL and
T.Data <= Teste.Data
ORDER BY T.Data DESC)
WHERE Saida IS NOT NULL and
Custo IS NULL


Fiz com o SQL Server, no MySQL já não vai funcionar (TOP 1).
Se for MySQL me fale que eu tento adaptar.


GOSTEI 0
Dastyler

Dastyler

27/03/2009

Só tem um detalhe que esqueci de mencionar. O banco de dados é PARADOX, pois é um sistema antigo aqui da empresa que precisa fazer a manutenção, e não podemos migra os dados para uma tecnologia mais recente, pois tem que ser rodado no cliente.
Tem algum comando semelhante ao TOP para o Paradox?


GOSTEI 0
Rudá

Rudá

27/03/2009

Pelo que eu vi em outros sites o paradox não tem Union Group By nada dessas coisas.

Acho que vc vai ter que fazer pelo código.

Seleciona todos que tem que atualizar

SELECT *
FROM Teste
WHERE Saida IS NOT NULL and 
      Custo IS NULL


Depois vai em um loop
while Not QueryLista.Eof do

Dentro do loop vc pesquisa no segundo query o custo depois da um update.

SELECT Custo 
FROM Teste 
WHERE Saida IS NULL and 
      Custo IS NOT NULL and 
      Data <= :Data 
ORDER BY Data DESC



GOSTEI 0
POSTAR