我有下面的两个表格,一个产品可能有很多价格条目,我希望输出具有每个商店最新产品信息的产品名称。我使用下面的方法,但没有得到预期的结果,可能有数百种产品具有数百个价格记录,每个都有数百个商店,这里仅以两个为例。

产品

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/

10-13 08:11
查看更多