Fórum retorno o ultimo valor de custo #58014

15/03/2007

0

Ola pessoal eu tenho uma tabela de custo de produto abaixo:
CD_PRODUTO, VALOR, MES, ANO
001 10,00 1 2006
001 9,00 8 2006
001 11,00 2 2007

cd_produto,mes e ano sao chave primaria

Quero q retorna o custo inferior ou igual a data q eu digitar
Exemplo eu digito a data 15/01/2007 e codigo do produto 1.

Quero q peque o valor 9,00 pq esta no mes 8 e ano 2006

Entenderam
o meu codigo é esse: mas ele nao traz no mes a ano que eu desejo:
select first 1 VL_CUSTO, mes,ano FROM CUSTO_PRODUTO WHERE cast ((mes||´/01´||´/´||ano) as date)
          <=:data and cd_produto =:prod
 


Alguem pode me ajudar
Desde ja agradeço
Fabio


Fabiotb

Fabiotb

Responder

Posts

15/03/2007

Emerson Nascimento

usando seu exemplo, e se a data digitada fosse 15/[b:2a55b35b60]02[/b:2a55b35b60]/2007, qual seria o valor retornado?


Responder

Gostei + 0

15/03/2007

Emerson Nascimento

tente assim:
select first 1
  VALOR, mes, ano
FROM
  CUSTO_PRODUTO
WHERE
  (ano + (mes / 100.00)) <=
  (extract(year from :data) + (extract(month from :data) / 100.00))
  and cd_produto =:prod
order by ano, mes desc



Responder

Gostei + 0

16/03/2007

Fabiotb

deu esse erro
ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -105
Specified EXTRACT part does not exist in input datatype

Statement: select first 1 VALOR, mes, ano
FROM
CUSTO_PRODUTO
WHERE
(ano + (mes / 100.00)) <= (extract(year from :data) + (extract(month from :data) / 100.00))
and cd_produto =:prod
order by ano, mes desc


Responder

Gostei + 0

16/03/2007

Emerson Nascimento

[i:9390435126]:data[/i:9390435126] deve ser uma data válida, [b:9390435126]passada por parâmetro[/b:9390435126] (não dá pra executar direto, mas funciona numa stored procedure ou passado pelo Delphi, por exemplo).
select first 1
  VALOR, mes, ano
FROM
  CUSTO_PRODUTO
WHERE
  (ano + (mes / 100.00)) <=
  (extract(year from :data) + (extract(month from :data) / 100.00))
  and cd_produto =:prod
order by ano, mes desc



[b:9390435126]para execução direta, tente assim:[/b:9390435126]
select first 1
  VALOR, mes, ano
FROM
  CUSTO_PRODUTO
WHERE
  (ano + (mes / 100.00)) <=
  (extract(year from cast(´15.01.2007´ as date)) + (extract(month from cast(´15.01.2007´ as date)) / 100.00))
  and cd_produto =:prod
order by ano, mes desc



Responder

Gostei + 0

16/03/2007

Emerson Nascimento

[size=18:42a19def1e]correção:[/size:42a19def1e]

:data deve ser uma data válida, passada por parâmetro (não dá pra executar direto, mas funciona numa stored procedure ou passado pelo Delphi, por exemplo).
select first 1
  VALOR, mes, ano
FROM
  CUSTO_PRODUTO
WHERE
  (ano + (mes / 100.00)) <=
  (extract(year from :data) + (extract(month from :data) / 100.00))
  and cd_produto =:prod
order by ano desc, mes desc


para execução direta, tente assim:
select first 1
  VALOR, mes, ano
FROM
  CUSTO_PRODUTO
WHERE
  (ano + (mes / 100.00)) <=
  (extract(year from cast(´15.01.2007´ as date)) + (extract(month from cast(´15.01.2007´ as date)) / 100.00))
  and cd_produto =:prod
order by ano desc, mes desc



Responder

Gostei + 0

16/03/2007

Fabiotb

Deu certo.
Obrigado!!!
Abraços


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar