我有一个看起来像这样的表:
Table: id, name
一个名字可以出现多次。我试图找出一个最佳查询,该查询将为每个名称及其最高 ID 返回。
输入数据:
1, "a"
2, "a"
3, "b"
4, "a"
5", "b"
输出:
4, "a"
5, "b"
我知道一种在查询的 FROM 部分使用子查询来执行此操作的方法。我希望我能以某种方式做得更快。
我目前做的:
SELECT table.*
FROM table, (SELECT MAX(id) maxid FROM table GROUP BY name) maxids
WHERE table.id = maxids.maxid
我很好奇是否有更快的方法!
最佳答案
为什么要使用自连接,这应该可以正常工作:
select max(id), name
from yourtable
group by name
现在,如果您有更多列想要包含在最终结果中,那么您可以使用以下方法:
select t1.id, t1.name, t1.col1
from yourtable t1
inner join
(
select max(id) id, name
from yourtable
group by name
) t2
on t1.id = t2.id
and t1.name = t1.name
甚至:
select t1.id, t1.name, t1.col1
from yourtable t1
where t1.id in (select max(t2.id)
from yourtable t2
group by t2.name);
参见 SQL Fiddle with Demo两者的
关于mysql - mysql的最佳查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13636484/