Postgres固有の(そして最速の)ソリューション:
select distinct on (out_id) *
from foo
order by out_id, id desc;
ウィンドウ関数 を使用した標準SQLソリューション (2番目に速い)
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;
どちらのソリューションも、各id
のみを返すことに注意してください。 out_id
が複数ある場合でも1回 同じ値。それらをすべて返したい場合は、dense_rank()
を使用してください row_number()
の代わりに