PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Maior por cada grupo


Solução específica do Postgres (e mais rápida):
select distinct on (out_id) *
from foo
order by out_id, id desc;

Solução SQL padrão usando uma função de janela (segundo mais rápido)
select id, x_part, y_part, out_id, out_idx
from (
  select id, x_part, y_part, out_id, out_idx, 
         row_number() over (partition by out_id order by id desc) as rn
  from foo
) t
where rn = 1
order by id;

Observe que ambas as soluções retornarão apenas cada id uma vez, mesmo se houver vários out_id valores que são iguais. Se você quiser que todos sejam retornados, use dense_rank() em vez de row_number()