Giải pháp cụ thể (và nhanh nhất) của Postgres:
select distinct on (out_id) *
from foo
order by out_id, id desc;
Giải pháp SQL tiêu chuẩn sử dụng chức năng cửa sổ (nhanh thứ hai)
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;
Lưu ý rằng cả hai giải pháp sẽ chỉ trả về mỗi id
một lần, ngay cả khi có nhiều out_id
các giá trị giống nhau. Nếu bạn muốn tất cả chúng được trả về, hãy sử dụng dense_rank()
thay vì row_number()