› Fóruns › SQL e PL/SQL › Order By em subselect [Resolvido] › Order By em subselect [Resolvido]
Olá,
Do jeito abaixo pode não ser mais simples para ler, mas fica mais simples para o otimizador e para o banco de dados em matéria de performance pois a tabela FOLLOWUP só é acessada uma vez em vez de 3:
SELECT p.id proc_id,
f.insert_data flp_data,
f.id flp_id,
f.posicaoflp_id
FROM abreprocesso p
LEFT JOIN (select f.nref,
max(id) id,
max(f.insert_data) keep (dense_rank last order by (f.id)) insert_data,
max(f.posicaoflp_id) keep (dense_rank last order by (f.id)) posicaoflp_id
from followup f
group by f.nref) f
ON f.nref = p.nref;
Exemplo de execução:
SQL> with abreprocesso as (
2 select 1 id, 100 nref from dual
3 ),
4 followup as (
5 select 555 id, 100 nref, to_date('06/01/2010', 'DD/MM/YYYY') insert_data, 'A' posicaoflp_id from dual union
6 select 556, 100, to_date('02/01/2010', 'DD/MM/YYYY'), 'B' from dual union
7 select 557, 100, to_date('03/01/2010', 'DD/MM/YYYY'), 'C' from dual
8 ) -- fim dos dados de exemplo
9 SELECT p.id proc_id,
10 f.insert_data flp_data,
11 f.id flp_id,
12 f.posicaoflp_id
13 FROM abreprocesso p
14 LEFT JOIN (select f.nref,
15 max(id) id,
16 max(f.insert_data) keep (dense_rank last order by (f.id)) insert_data,
17 max(f.posicaoflp_id) keep (dense_rank last order by (f.id)) posicaoflp_id
18 from followup f
19 group by f.nref) f
20 ON f.nref = p.nref;
PROC_ID FLP_DATA FLP_ID POSICAOFLP_ID
1 3/1/2010 557 C