MySQL从特定月份获得具有不同product_name的最新产品

时间:2017-06-08 11:40:43

标签: mysql database mysqli

我的数据库中有以下product表。我希望按照product_name的降序排列12月份添加了不同id的所有产品的行。

id  product_name    qty month
1   Apple           20  Dec
2   Banana          40  Jan
3   Cherry          60  Jun
4   Apple           25  Dec
5   Banana          50  Dec
6   Papaya          20  Dec
7   Guava           34  Aug
8   Watermelon      55  Mar
9   Apple           75  Dec
10  Orange          32  Dec

结果表应如下所示:

id  product_name    qty month
10  Orange          32  Dec
9   Apple           75  Dec
6   Papaya          20  Dec
5   Banana          50  Dec

到目前为止,我已经提出了以下查询,但它并没有得到我需要的结果。

SELECT * 
FROM product 
WHERE month = "Dec" 
GROUP BY product_name 
ORDER BY id DESC

此查询的问题在于它获取Apple的第一行/记录而不是最后一行,如下表所示:

id  product_name    qty month
10  Orange          32  Dec
6   Papaya          20  Dec
5   Banana          50  Dec
1   Apple           20  Dec

任何人都可以帮我写一个正确的mysql查询。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT MAX(id), product_name  
FROM product 
WHERE month = "Dec" 
GROUP BY product_name 

获得最大idproduct_name

<强>输出:

max_id  product_name
9       Apple
5       Banana
10      Orange
6       Papaya

使用上述查询作为派生表,您可以联接回原始表以获取其余字段:

SELECT t1.*
FROM product AS t1
INNER JOIN (
   SELECT MAX(id) AS max_id, product_name  
   FROM product 
   WHERE month = "Dec" 
   GROUP BY product_name
) AS t2 ON t1.id = t2.max_id and t1.product_name = t2.product_name
ORDER BY t1.id

Demo here