Если вам нужна только последняя start_date
на reference
, вы можете использовать агрегацию:
select c.reference, max(cp.start_date) max_start_date
from contracts c
left join contracts_premiums cp on cp.contract_id = c.id
group by c.reference
Это гарантирует, что вы получите только одну строку на reference
.
Если вам нужно больше столбцов из contracts_premiums
или если вы хотите отсортировать по столбцу, отличному от start_date
(возможно, вы хотите вместо created_at
), тогда другой вариант - distinct on
:
select distinct on (c.reference) c.reference, cp.start_date, cp.created_at
from contracts c
left join contracts_premiums cp on cp.contract_id = c.cid
order by c.reference, cp.created_at desc