问题描述
|
我有这样的表或queryresult。
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
解决方法
此解决方案无需使用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)
可能有效,但存在两个问题。
它绝对无法保存(我不是100%确定我的解决方案是)
如果有人输入1AAA之类的名称,则会引起问题,因为Concat(11,\'AAA\')
=Concat (1,\'1AAA\')
,SELECT id,name,url
FROM yourtable
WHERE id IN (SELECT max(id) FROM yourtable GROUP BY name))
内部查询为表中的每个\'name \'获取最高的ID号,然后外部查询使用这些ID来获取ID所在的其余行。,加GROUP BY id ORDER BY id ASC
就像是
SELECT id,url FROM yourtable GROUP BY id ORDER BY id ASC
,终于明白了。
SELECT id,url,sum(id) as demosum FROM table_name GROUP BY name ORDER BY ID DESC
这应该工作。