Retornar Ultimo preço alterado

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
fabiodequeiroz
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qui, 31 Jan 2013 2:28 pm

olá tenho uma tabela que grava todas as alteraçoes de preços dos produtos, eu quero que o script me retorne todos os produtos com o ultimo preço alterado.
ex: o produto codigo 4437 teve tres alterações foi colocado 0,90 no dia 19/07/2012 depois foi novamente alterado para 0,90 no dia 21/07/2012 e depois foi alterado para 0,99 no dia 17/09/2012.

quando eu executo esse codigo ele me retorna dois resultados um para 0,90 e outro para 0,99 mas eu preciso que retorne apenas 0,99 que foi a ultima alteração.

SELECT a.seqproduto,a.preço, MAX(a.dtahoralteracao) As UltimaData
FROM prodlogpreco a where
a.nroempresa=60
and a.seqproduto=4437
GROUP BY a.seqproduto,a.preço ;

quando eu executo o script abaixo ele me tras apenas a ultima alteração mas não vem o campo preço, porque se eu colocar pra aparecer como da forma acima tenho que fazer o group by com a.seqproduto, a.seqpreco

SELECT a.seqproduto, MAX(a.dtahoralteracao) As UltimaData
FROM mad_prodlogpreco a where
a.nroempresa=60
and a.seqproduto=4437
GROUP BY a.seqproduto ;
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Se precisar somente do preço e código do produto, você poderia usar o keep:

Selecionar tudo

SELECT a.seqproduto, max(a.preço) keep (dense_rank last order by a.dtahoralteracao) As UltimoPreco
FROM prodlogpreco a where
a.nroempresa=60
and a.seqproduto=4437
GROUP BY a.seqproduto,a.preço
;
Para retornar todas as colunas, também poderia fazer:

Selecionar tudo

select * from
(
  SELECT a.*
  FROM prodlogpreco a where
  a.nroempresa=60
  and a.seqproduto=4437
  order by a.dtahoralteracao desc
)
where rownum = 1
;
fabiodequeiroz
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qui, 31 Jan 2013 2:28 pm

Bom dia, desculpa pela demora na resposta, porque na época tinha dado errado e tinha conseguido de outra forma, a primeira opção retornou o mesmo resultado que eu estava tendo os dois preços mas a segunda deu perfeito e eu deixei o select como abaixo e me retornou o que eu precisava.
Muito obrigado.

Selecionar tudo

select * from
(
  SELECT a.preço,a.dtahoralteracao,a.seqproduto
  FROM prodlogpreco a where
  a.nroempresa=60
  and a.seqproduto=4437
  order by a.dtahoralteracao desc
)
where rownum = 1
;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes