Mysql 从相同名称中选择最后一行

Mysql 从相同名称中选择最后一行,mysql,sql,Mysql,Sql,我想列出表中的水果名称,但不想列出同一用户的多个水果名称 我的桌子看起来像这样 id | username | fruits ------------------------------------------ 1 | John | strawberry 2 | Nick | banana 3 | Ben | apple 4 |

我想列出表中的水果名称,但不想列出同一用户的多个水果名称

我的桌子看起来像这样

id     |    username         |  fruits
------------------------------------------
1      |    John             |  strawberry
2      |    Nick             |  banana
3      |    Ben              |  apple
4      |    Nick             |  pear
5      |    John             |  cherry
输出应该是这样的

5  |  John     |    cherry
4  |  Nick     |    pear
3  |  Ben      |    apple
我试过这个代码,但它列出了第一批水果

"SELECT * FROM mytable GROUP BY username DESC"
假设您使用的是MySQL 8+,下面是使用
ROW\u NUMBER
的“好”方法:

SELECT username, fruits
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY username ORDER BY id DESC) rn
    FROM yourTable
) t
WHERE rn = 1;
在MySQL的早期版本中,我们可以加入到一个子查询,该子查询可以查找每个
用户名的最新记录

SELECT t1.username, t1.fruits
FROM yourTable t1
INNER JOIN
(
    SELECT username, MAX(id) AS max_id
    FROM yourTable
    GROUP BY username
) t2
    ON t1.username = t2.username AND
       t1.id = t2.max_id;

可以使用相关子查询

select id,username, fruits
from tablename a
where id in (select max(id) from tablename b where a.username=b.username)

您可以在

SELECT a.username, a.fruits
FROM table_name a
where (a.username,a.id) in
(
    SELECT username, MAX(id) as mid 
    FROM table_name
    GROUP BY username
) 

这也将与其他答案不同:

select `username`,`fruits` from (select `id12`,`username`,`fruits`,RANK() over 
(PARTITION  by `username`
order by `id12` desc )as rn   from Table1)m where rn=1;

检查:

您可以使用相关子查询:

select t.*
from table t
where t.id = (select max(t1.id) from table t1 where t1.username = t.username);