2012-09-11 32 views
1

我的表(产品)看起来是这样的:如何从mysql表中选择唯一的,最近插入的值?

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 
+1

您的查询完整无缺。您使用ID而不是值。 –

回答

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) 
+0

感谢我的作品! –

1

试试这个: -

SELECT * FROM `products` GROUP BY `name` ORDER BY id DESC LIMIT 2 
+0

同样的结果,因为我D –

+0

PLease忽略这个眼睛变得有趣 –

1

这个查询应该做的伎俩:

SELECT a.* 
FROM products a 
    INNER JOIN (SELECT MAX(id) AS id 
       FROM products 
       GROUP BY name 
       ) b 
       ON a.id = b.id; 
+0

谢谢发现解决方案 –

+0

如果您的问题解决了,请接受。 –

+0

ofc,但我需要再等3分钟:> –

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的记录,然后你加入,早在桌子上返回记录你要。

相关问题