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.
 

Responder a