我的表(产品)如下所示:
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
您需要获取每种类型的最后插入行(最高 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)
试试这个:-
SELECT * FROM `products` GROUP BY `name` ORDER BY id DESC LIMIT 2
这个查询应该可以解决问题:
SELECT a.*
FROM products a
INNER JOIN (SELECT MAX(id) AS id
FROM products
GROUP BY name
) b
ON a.id = b.id;
您将要在表上进行自联接:
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,然后将其加入表中以返回所需的记录。