Это ваша проблема:
select c.id as cus_id, c.name as cus_name, p.id as latest_purchase_id
from customer c join
purchase p
on c.id = p.customer_id
where p.id = (select p2.id
-----------^
from purchase p2
where p2.year = (select max(p3.year)
from purchase p3
where p2.customer_id = p3.customer_id
)
);
Чтобы исправить эту проблему, измените =
на in
.Тем не менее, без описания того, что вы делаете, я не могу сказать, делает ли это что-нибудь полезное.
Если вам нужна последняя покупка для каждого покупателя, я думаю о чем-то вроде этого:
select c.id as cus_id, c.name as cus_name, p.id as latest_purchase_id
from customer c join
purchase p
on c.id = p.customer_id join
(select p2.customer_id, max(p2.year) as max_year
from purchase p2
group by p2.customer_id
) p2
on p2.customer_id = p.customer_id and
p2.max_year = p.year;