Bom dia comunidade! Tenho uma tabela que é um histórico, a chave dela é composta por id(number) e anoMes(number), ela não é alimentada todo mês de forma que o último registro de um id pode ser o mês atual, o início do ano ou qualquer mês pra trás. exemplo: historicos -------------------------- idH anoMes descricao -------------------------- 1 201508 teste1 1 201503 teste1 1 201412 teste1 2 201505 teste2 2 201501 teste2 2 201411 teste2 2 201408 teste2 -------------------------- select h.idH, h.anoMes, h.descricao from historicos h where h.idH > 0 and h.anoMes = ( select max( h1.anoMes ) from historicos h1 where h1.idH = h.idH and h1.anoMes <= 201508 ); resultado --------------------------------------- idH anoMes descricao --------------------------------------- 1 201508 teste1 2 201505 teste2 --------------------------
Até aí tudo certo o problema é quando ligo esta tabela com outra. Exemplo: Locais -------------------------- idL nome idH -------------------------- 1 local1 2 2 local2 (null) 3 local3 1 4 local4 (null) -------------------------- select l.idL, l.nome, h.idH, h.anoMes, h.descricao from locais l left join historicos h on h.idH = l.idH and h.anoMes = ( select max( h1.anoMes ) from historicos h1 where h1.idH = h.idH and h1.anoMes <= 201508 ) where l.local > 0; resultado esperado ----------------------------------------------------------- idL nome idH anoMes descricao ----------------------------------------------------------- 1 local1 2 201505 teste2 2 local2 (null) (null) (null) 3 local3 1 201508 teste1 4 local4 (null) (null) (null) ------------------------------------------------------------ Neste caso o oracle não aceita a subquery, aí pergunto se existe um jeito de fazer esta consulta? Neste exemplo são só duas tabelas, mas no real preciso ligar mais tabelas e consequentemente a complexidade da query aumenta. Desde já agradeço a colaboração de todos, Daniel.