como selecionar a data mais recente para um período?

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
joaoluizbt
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Qui, 05 Mai 2011 3:53 pm
Localização: Rio de Janeiro

Olá.

eu tenho uma tablea com preços dos produtos que começaram a valer em cada data tipo:

protudo 1 01/11/2011 100,00
produto 1 01/01/2012 50,00
produto 1 01/06/2012 25,00

eu quero saber o valor que estava vigente no periodo de abril de 2012.
como eu seleciono apenas este valor?

eu tentei um select pegando os valores com data anterior a abril, mas ele pega janeiro e novembro...
tipo:

Selecionar tudo

select produto, max(data), valor from tabela_valor
where data < 30/04/2012
group by produto, valor
ele duplica a linha e exibe os dois valores porque eles são diferentes, então não agrupa...

alguém sabe como eu faço isso?

obrigado.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Oi,
na verdade ele agrupa sim. O conceito de MAX neste caso, é que para cada conjunto de "produto, valor" ele vai pegar a maior data, ao contrário do que você gostaria que é pegar o valor correspondente a maior data.
Uma solução simples seria utilizando subselect :

Selecionar tudo

select produto, data, valor from tabela_valor a
where data  = (select max(data) from tabela_valor b
                      where b.data < 30/04/2012
                          and b.produto = a.produto);
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

Outra forma:

Selecionar tudo

select produto
      , max(valor) keep (dense_rank last order by data) valor
      , max(data) keep (dense_rank last order by data) data
from  tabela_valor
where  data < to_date( '30/04/2012', 'dd/mm/yyyy' )
group by produto
Responder
  • Informação
  • Quem está online

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