Mysql获得当前价格最高的商品

时间:2013-12-13 00:09:15

标签: mysql groupwise-maximum

我希望获得目前价格最高的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

谢谢!

2 个答案:

答案 0 :(得分:2)

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;

答案 1 :(得分:1)

在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+价格。