【问题标题】:MySQL: Get product with most recent price for each storeMySQL:获取每个商店最新价格的产品
【发布时间】:2016-01-17 22:25:02
【问题描述】:

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

产品

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;

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以使用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.

    【讨论】:

      【解决方案2】:

      您的查询应更新为:

      SELECT `prod`.`name`
      , max(`prc`.`price`)
      , `prc`.`store`
      , `prc`.`added`
      FROM `product` `prod`
      LEFT JOIN `price` `prc` ON `prod`.`product_id` = `prc`.`product_id`
      group by `prod`.`name`, `prc`.`store`
      ORDER BY `prod`.`cat_id` DESC
      , `prc`.`added` DESC
      , `prc`.`price` DESC;
      

      【讨论】:

        猜你喜欢
        • 2015-11-05
        • 2016-04-25
        • 1970-01-01
        • 2017-12-05
        • 2011-07-11
        • 1970-01-01
        • 2019-05-07
        • 2015-04-22
        • 2017-05-22
        相关资源
        最近更新 更多