我有这样的表或查询结果。
id name url
--- ---- ---
1 AAA http://aaa.com?r=123
2 AAA http://aaa.com?r=456
1 BBB http://bbb.com?r=xyz
2 BBB http://bbb.com?r=qsd
3 BBB http://bbb.com?r=fgh
4 BBB http://bbb.com?r=jkl
1 CCC http://ccc.com?r=a23
3 CCC http://ccc.com?r=bc6
我真正想要的是获得ID最高的所有唯一名称。基本上就是这样。
id name url
--- ---- ---
2 AAA http://aaa.com?r=456
4 BBB http://bbb.com?r=jkl
3 CCC http://ccc.com?r=bc6
我可以添加或更改查询以获得该结果。
建议的解决方案不起作用或返回错误的结果
好吧最后我似乎自己找到了,这似乎有效:
SELECT id, name, url
FROM yourtable
WHERE concat(id, name) IN
(SELECT concat(max(id), name) FROM yourtable GROUP BY name)
id name url
--- ---- ---
2 AAA http://aaa.com?r=456
4 BBB http://bbb.com?r=jkl
3 CCC http://ccc.com?r=bc6
答案 0 :(得分:1)
SELECT id, name, url
FROM yourtable
WHERE id IN (SELECT max(id) FROM yourtable GROUP BY name))
内部查询为表中的每个“名称”提取最高ID号,然后外部查询使用这些ID来获取这些ID出现的其余行。
答案 1 :(得分:0)
添加GROUP BY id ORDER BY id ASC
像
这样的东西SELECT id, name, url FROM yourtable GROUP BY id ORDER BY id ASC
答案 2 :(得分:0)
此解决方案无需使用Concat
即可运行SELECT yt.id,
yt.name,
yt.url
FROM yourtable yt
INNER JOIN
(SELECT max(id) id ,
name
FROM yourtable GROUP BY name) maxyt
ON yt.id = maxyt.id
AND yt.name = maxyt.name;
使用concat(id, name)
可能有效,但它有两个问题。
Concat(11,'AAA')
= Concat (1,'1AAA')
答案 3 :(得分:0)
终于明白了。
SELECT id, name, url, sum(id) as demosum FROM table_name GROUP BY name ORDER BY ID DESC
这应该有效。