我有下面的两个表格,一个产品可能有很多价格条目,我希望输出具有每个商店最新产品信息的产品名称。我使用下面的方法,但没有得到预期的结果,可能有数百种产品具有数百个价格记录,每个都有数百个商店,这里仅以两个为例。
产品
product_id | name | cat_id
---------------------------------
1 | product 1 | 124567
2 | product 2 | 834392
3 | product 3 | 234723
价钱
product_id | price | store | added
--------------------------------------------------
1 | 1.00 | 1 | 2016-01-01 00:00:00
1 | 1.50 | 2 | 2016-01-01 00:00:00
2 | 3.75 | 1 | 2016-01-01 00:00:00
2 | 4.00 | 2 | 2016-01-01 00:10:00
2 | 3.99 | 2 | 2016-01-01 00:00:00
3 | 34.56 | 1 | 2016-01-01 00:00:00
预期产量
name | price | store | added
--------------------------------------------------
product 1 | 1.00 | 1 | 2016-01-01 00:00:00
product 1 | 1.50 | 2 | 2016-01-01 00:00:00
product 2 | 3.75 | 1 | 2016-01-01 00:00:00
product 2 | 4.00 | 2 | 2016-01-01 00:10:00
proudct 3 | 34.56 | 1 | 2016-01-01 00:00:00
的SQL
SELECT `prod`.`name`
, `prc`.`price`
, `prc`.`store`
, `prc`.`added`
FROM `product` `prod`
LEFT JOIN `price` `prc` ON `prod`.`product_id` = `prc`.`product_id`
ORDER BY `prod`.`cat_id` DESC
, `prc`.`added` DESC
, `prc`.`price` DESC;
最佳答案
您可以使用NOT EXISTS
消除同一商店/产品存在较新价格的价格行;
SELECT name, price, store, added
FROM product
JOIN price
ON product.product_id = price.product_id
WHERE NOT EXISTS (
SELECT 1 FROM price p
WHERE price.product_id = p.product_id
AND price.store = p.store
AND price.added < p.added
);
An SQLfiddle to test with。
关于mysql - MySQL:获取每个商店的最新价格的产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34844491/