Теперь, когда postgres поддерживает оконные функции.
SELECT group_id, title, checkout_date) FROM
(SELECT group_id,
title,
checkout_date,
rank() OVER (PARTITION BY group_id ORDER BY checkout_date) AS rk
) AS subq
WHERE rk=1;
Возможно, вы хотите индекс на (group_id, checkout_date)
, возможно, наоборот.Я не постучал в окна достаточно, чтобы знать, что пытается сделать планировщик.