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获取当前最高价商品的主要内容,如果未能解决你的问题,请参考以下文章
牛客网专题SQL206 获取每个部门中当前员工薪水最高的相关信息