SQL-кода для иллюстрации - (Это T-SQL и SQL Server дружественный , но у меня не было никакого mysql. Последний запрос должен с небольшими изменениями (в соответствии с вашими именами таблиц) хорошо работает и в MySQL.
Моей логикой является поиск новейшего company_order для каждого product_id. у меня есть, что я могу просто присоединиться к компа ny_order_id к company_order, и у меня есть shipment_id для каждой самой последней из последних версий company_order на продукт_id
DROP TABLE #shipment
DROP TABLE #company_order
DROP TABLE #company_order_item
CREATE TABLE #shipment
(
shipment_id INT ,
shipping_date INT
) ;
CREATE TABLE #company_order
(
company_order_id INT ,
shipment_id INT ,
company_id INT
) ;
CREATE TABLE #company_order_item
(
company_order_item_id INT ,
company_order_id INT ,
product_id INT
) ;
INSERT INTO #shipment
(shipment_id , shipping_date)
VALUES
(1 , 1),
(2 , 2),
(3 , 3)
INSERT INTO #company_order
(company_order_id , shipment_id , company_id)
VALUES
(1 , 1 , 1),
(2 , 2 , 1),
(3 , 3 , 1)
INSERT INTO #company_order_item
(company_order_item_id , company_order_id , product_id)
VALUES
(1 , 1 , 1) ,
(2 , 1 , 2),
(2 , 2 , 2),
(1 , 1 , 3),
(1 , 3 , 4)
SELECT
product_id ,
shipment_id
FROM
(
SELECT
product_id ,
MAX(company_order_id) AS company_order_id
FROM
#company_order_item
GROUP BY
product_id
) AS MostRecentProductInOrder
INNER JOIN #company_order
ON MostRecentProductInOrder.company_order_id = #company_order.company_order_id
Блестящий! Именно то, что мне нужно. Я потратил несколько часов, пытаясь выкрутить эту штуку: не понимал, что вы можете сделать подобный выбор. Огромное спасибо. – Steve