1

我的表(产品)如下所示:

id name value
1  oil  100
2  oil  140
3  glue 120
4  glue 110

我需要选择最后插入的油和最后插入的胶水,所以结果应该是:

2 oil 140
4 glue 110

我试过什么:

SELECT * FROM `products` GROUP BY `name` ORDER BY `value` DESC LIMIT 2

但这个查询显示

1  oil  100
3  glue 120
4

4 回答 4

2

您需要获取每种类型的最后插入行(最高 id),然后检索这些 id 的数据。这假设您的 id 编号随着每次新插入而增加,因此更高的 id 值假定稍后插入。

 SELECT d.id, d.name, d.value
   FROM products d
   JOIN (
     SELECT MAX(id) id, name
       FROM products
      GROUP BY name
   ) m ON (d.id = m.id) 
于 2012-09-11T12:02:35.337 回答
1

试试这个:-

SELECT * FROM `products` GROUP BY `name` ORDER BY id DESC LIMIT 2
于 2012-09-11T12:01:08.010 回答
1

这个查询应该可以解决问题:

SELECT a.*
FROM products a
     INNER JOIN (SELECT MAX(id) AS id
                 FROM products
                 GROUP BY name
                ) b
                ON a.id = b.id;
于 2012-09-11T12:02:26.333 回答
1

您将要在表上进行自联接:

SELECT p1.id, p1.name, p1.value
FROM products p1
inner join 
(
   select name, max(id) mxid
   from products
   group by id
) p2
   on p1.name = p2.name
   and p1.id = p2.mxid

内部子查询获取max()记录的 id,然后将其加入表中以返回所需的记录。

于 2012-09-11T12:04:04.010 回答