Daniel
Não testei... veja se funciona:
select l.idL, l.nome, h.idH, h.anoMes, h.descricao
from
(
select h1.idH, max( h1.anoMes ) as max_AnoMes
from historicos h1
where h1.anoMes = 201508
group by h1.idH
) h1g
join historicos h
on h.idH = h1g.idH
and h.anoMes = h1g.max_AnoMes
join locais l
on l.idH = h.idH
where l.local 0;
[ ]
André Santos
Em 7 de agosto de 2015 09:14, dcgercoss...@gmail.com [oracle_br]
oracle_br@yahoogrupos.com.br escreveu:
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
--
idHanoMesdescricao
--
1201508teste1
1201503teste1
1201412teste1
2201505teste2
2201501teste2
2201411teste2
2201408teste2
--
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
---
idHanoMesdescricao
---
1201508teste1
2201505teste2
--
Até aí tudo certo o problema é quando ligo esta tabela com outra. Exemplo:
Locais
--
idLnomeidH
--
1local12
2local2(null)
3local31
4local4(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
---
idLnomeidHanoMesdescricao
---
1 local12 201505teste2
2 local2(null)(null) (null)
3 local31 201508teste1
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.