PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Le plus élevé pour chaque groupe

Solution spécifique à Postgres (et la plus rapide) :

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

Solution SQL standard utilisant une fonction window (deuxième plus rapide)

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;

Notez que les deux solutions ne renverront que chaque id une fois, même s'il y a plusieurs out_id valeurs qui sont les mêmes. Si vous voulez qu'ils soient tous renvoyés, utilisez dense_rank() au lieu de row_number()