В указанной вами модели данных нет информации о «самом дорогом продукте». Позвольте предположить, что products
на самом деле имеет такой столбец, как «цена».
Думаю, я бы предложил оконные функции:
SELECT op.*
FROM (SELECT o.*, p.*
ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.order_date DESC, p.price DESC) as seqnum
FROM orders o JOIN
products p
ON o.PRODUCT_ID = p.PRODUCT_ID
) op
WHERE seqnum = 1;
Это возвращает одну строку для каждого клиента. Если есть ie и вам нужны все строки, измените ROW_NUMBER()
на RANK()
. Обратите внимание, что этот метод дает вам большую гибкость при выборе столбцов, которые вы хотите включить в набор результатов.