MySQL:多个商店中每个产品的最新最低价格

时间:2016-01-20 00:48:06

标签: mysql

我试图获取最新更新产品的列表,其中updated字段的下降价格也是最低的,但每个产品只有一条记录,问题是最多的每家商店的最近记录都是有效的,所以我需要根据产品所有商店的最新价格提取最低价格,这样它才会返回最近的最低价格。

prod_id     | price     | store | updated
--------------------------------------------------------
product 1   | 1.99      | 1     | 2016-01-20 00:00:00
product 2   | 1.49      | 1     | 2016-01-20 00:10:00
product 2   | 1.19      | 2     | 2016-01-20 00:00:00
product 3   | 12.49     | 1     | 2016-01-20 00:00:00
product 3   | 12.49     | 2     | 2016-01-20 00:00:00
product 4   | 9.89      | 1     | 2016-01-20 00:00:00
product 5   | 10.00     | 1     | 2016-01-20 00:10:00
product 5   | 9.99      | 2     | 2016-01-20 00:00:00
product 5   | 10.49     | 3     | 2016-01-20 00:00:00

预期输出

product 1   | 1.99      | 1     | 2016-01-20 00:00:00
product 2   | 1.49      | 1     | 2016-01-20 00:10:00
product 3   | 12.49     | 1     | 2016-01-20 00:00:00
product 4   | 9.89      | 1     | 2016-01-20 00:00:00
product 5   | 9.99      | 2     | 2016-01-20 00:00:00

如果prod_id只有一条记录使用,那么流量就是如果prod_id有两个或更多条目,则按updated排序列按降序排列,以便显示该prod_id商店中最新记录的最低价格。

SQL

SELECT `price`
, `store`
, `updated`
FROM `price` 
ORDER BY `updated` DESC
, `store` ASC
LIMIT 10;

主要问题是,如果我使用的是某个功能,我无法弄清楚如何只为产品的最新记录中的最低价格中的产品提取一条记录做上面概述的逻辑或有没有办法将上述逻辑应用于普通的SELECT查询?

1 个答案:

答案 0 :(得分:0)

永远记住这种SQL只适用于子查询:

SELECT distinct price.*
FROM price, (
    SELECT prod_id, max(updated) last_updated
    FROM price
    group by 1
) as price_last
WHERE price.prod_id = price_last.prod_id
AND price.updated = price_last.last_updated

如果您确定更新,prod_id是唯一的(这意味着每一秒产品只更新一次),您可以删除" distinct"