2015-08-31 26 views
-3

我有这样的MySQL表:如何为每个用户名获取MAX(id)?

enter image description here

如何获得最大的ID为每个用户名?

像上面的图片,我只想获得用户名'mostafa'或''samsung',但与最大id的行。

我测试了很多的查询,如:

SELECT MAX(id) , latitude, longitude FROM 'users_geo' WHERE username = 'mostafa' 

这只是返回与用户名穆斯塔法最大ID记录。

而且测试此查询:

SELECT id, latitude, longitude FROM `users_geo` WHERE username = 'samsung' HAVING MAX(id) LIMIT 0 , 30 

该查询只返回错误的结果。查询返回行id=9,而用户'samsung'的最大ID为21

+1

而不是表的图像,请设置一个sqlfiddle,所以我们可以重现该问题。 –

+0

请参阅http://dev.mysql.com/doc/en/example-maximum-column-group-row.html – Strawberry

+0

@Lelio Faieta:谢谢..提及,我不熟悉[SQlFiddle](http:///sqlfiddle.com/)。但这是pastebin(http://pastebin.com/Pz6CP3mE) – Mostafa

回答

0

使用mysqlgroup byAggregate (GROUP BY) Functionsmax你的情况。

select username, max(id) from users_geo group by username; 
+0

谢谢。我使用这个 - >'SELECT * FROM(SELECT * FROM'users_geo' ORDER BY'id' DESC)tmp GROUP BY tmp.'username'; ',但返回错误:'#1248 - 每个派生表都必须有自己的别名' – Mostafa

+0

'group by'应该与[Aggregate(GROUP BY)Functions]一起使用(https://dev.mysql.com/doc/) refman/5.0/EN /组逐functions.html)。试试这个'SELECT tmp.usename,max(tmp.id)FROM(SELECT * FROM users_geo ORDER BY id DESC)tmp GROUP BY tmp.username;''或者简单地''从users_geo组中通过用户名选择用户名,最大(id) – luoluo

+0

谢谢...使用此[链接](https://gist.github.com/anonymous/47e5f024a08b3f6c6302)并工作。 – Mostafa