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()