Mysql获取当前最高价商品

Posted

技术标签:

【中文标题】Mysql获取当前最高价商品【英文标题】:Mysql get current highest priced items 【发布时间】: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吗? 同一个东西!?!? 是同一个家庭。这就是我的意思 【参考方案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 秒。

以上是关于Mysql获取当前最高价商品的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mysql 查询中获取最新的商品价格?

小程序 优选商城 项目讲解

牛客网专题SQL206 获取每个部门中当前员工薪水最高的相关信息

Mysql案例5:取得平均薪资最高的部门的部门名称

Vue电商后台管理系统项目第6篇-商品管理的商品列表和商品添加组件实现

MySQL获取当前时间年月年月日