sql >> Base de Datos >  >> RDS >> PostgreSQL

Más alto por cada grupo

Solución específica (y más rápida) de Postgres:

select distinct on (out_id) *
from foo
order by out_id, id desc;

Solución SQL estándar usando una función de ventana (segundo más 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;

Tenga en cuenta que ambas soluciones solo devolverán cada id una vez, incluso si hay varios out_id valores que son iguales. Si desea que se devuelvan todos, use dense_rank() en lugar de row_number()