полем rank/row_number и оконной функцией с сортировкой, если mysql, то 2 джоина придется делать. Но лучше пересмотреть схему. Подозреваю, что вам часто нужно выбирать текущее состояние заказа, и почему бы не добавить внешний ключ с последним элементом заказа в таблицу с заказами?
В случае постгресса:
SELECT c.*, p.*
FROM customer c INNER JOIN
(SELECT RANK() OVER (PARTITION BY customer_id ORDER BY date DESC) r, *
FROM purchase) p
ON (c.id = p.customer_id)
WHERE p.r = 1
Спасибо, окно подходит, правда выглядит как магия. Внешний ключ не подойдет, тк выбрать нужно самый дорогой элемент, или самый дешевый, а элементы могут добавляться в любое время.
Обсуждают сегодня