【问题标题】:Mysql get current highest priced itemsMysql获取当前最高价商品
【发布时间】:2013-12-31 15:35:59
【问题描述】:

我正在寻找当前价格最高的 20 种产品。

我有一个包含许多价格表的产品表。

产品:id

价格:id、product_id、value、change_date

这是一个例子。

Product: 1
  price: 11, change_date 12/1/2013, value: $10
  price: 12, change_date 11/1/2013, value: $15
Product: 2
  price: 21, change_date: 12/1/2013, value: $12
  price: 22, change_date: 11/1/2013, value: $10
Product: 3
  price: 31, change_date: 11/1/2013, value: $20

“当前”价格最高的产品是 3,比 2,比 1

我将如何在 MySQL 中执行此操作?

我尝试了以下方法,但值列与 max(change_date) 行关联的值不匹配。所以排序结果被破坏了。

SELECT id, product_id, price, max(change_date) 
FROM prices
GROUP BY product_id
ORDER BY value DESC
LIMIT 20

谢谢!

【问题讨论】:

  • 幸运的是,这个问题每天都会被问到
  • @Strawberry,然后标记为 dup 和 ref,不是吗?
  • groupwise-maximum?不应该是greatest-n-per-group吗?
  • 同一个东西!?!?
  • 是同一个家庭。这就是我的意思

标签: mysql groupwise-maximum


【解决方案1】:
SELECT id, product_id, value, change_date
FROM prices
JOIN (SELECT product_id, MAX(change_date) AS recent_date
      FROM prices
      GROUP BY product_id) AS most_recent
  ON prices.product_id = most_recent.product_id
    AND prices.change_date = most_recent.recent_date
ORDER BY value DESC
LIMIT 20;

【讨论】:

    【解决方案2】:

    在 where 子句中按每个产品的 max(change_dt) 过滤。

    select id, product_id, price, change_dt
    from price p
    where change_dt in (select max(change_dt) from price where product_id = p.product_id)
    order by price
    limit 20;
    

    注意:我将prices 表设为单数形式price

    SQL 小提琴: http://sqlfiddle.com/#!2/f6dc0/2

    SQL Fiddle 仅将价格限制为 1,因为我不想为测试数据设置 20 多个价格。

    【讨论】:

    • 简洁的解决方案。我以前没用过sqlfiddle,谢谢提示
    • 值得注意的是这个例子更简洁,但似乎比其他解决方案运行得慢。大约 10 秒,而在一百万行价格行中为 1 秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2016-05-09
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多