Postgres-specifieke (en snelste) oplossing:
select distinct on (out_id) *
from foo
order by out_id, id desc;
Standaard SQL-oplossing met een vensterfunctie (tweede snelste)
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;
Merk op dat beide oplossingen alleen elke id
. teruggeven één keer, zelfs als er meerdere out_id
. zijn waarden die hetzelfde zijn. Als je ze allemaal wilt retourneren, gebruik dan dense_rank()
in plaats van row_number()