【问题标题】:MySQL: Most recent lowest price per product across multiple storesMySQL:多个商店中每件产品的最新最低价格
【发布时间】:2016-04-25 16:24:25
【问题描述】:

我正在尝试获取按updated 降序排列的最新更新产品列表,其中价格也最低,但每个产品只有一条记录,问题是每个产品的最新记录store 是有效的,所以我需要根据产品的所有商店的最新价格提取最低价格,所以它只会返回最近的最低价格。

价格

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 查询?

【问题讨论】:

  • 这是 SO 上 MySQL 标签下最常见的问题。有时,它也得到了正确的回答。我可以在那里看到一些答案--->。我怀疑其中一些是正确的。
  • @Strawberry,对此感到抱歉,我已经更新了问题,它不像我第一次发布的那么直接,完全是我的错,没有完全解释。
  • 我上面的回复仍然有效

标签: mysql


【解决方案1】:

永远记住这种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 是唯一的(这意味着每秒任何产品仅更新一次),您可以删除“不同”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多