2011-04-18 63 views
1

我有一個表或這樣的queryresult。MySQL查詢得到所有最高的ID

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 

什麼可以添加或更改爲查詢來獲得該結果。

所提出的解決方案不工作或返回錯誤的結果

OK最後我似乎已經找到了自己,這似乎工作:

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

此解決方案,而無需使用的毗連

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)可以工作,但它存在兩個問題。

  1. 它絕對不是可優化搜索(我不是100%肯定,我的解決方案)
  2. 會造成問題,如果有人把像1AAA一個名字,因爲Concat(11,'AAA') = Concat (1,'1AAA')
0

添加GROUP BY id ORDER BY id ASC

喜歡的東西

SELECT id, name, url FROM yourtable GROUP BY id ORDER BY id ASC 
+0

這會工作嗎?在SQL Server上它不會。 'GROUP BY'必須在'ORDER BY'之前。 – 2011-04-18 22:04:18

+0

難道你不想'ORDER BY ID DESC'? – 2011-04-18 22:04:20

+0

不,他想從1,2,3到4的最高到最低 – Vish 2011-04-18 22:08:19

1
SELECT id, name, url 
FROM yourtable 
WHERE id IN (SELECT max(id) FROM yourtable GROUP BY name)) 

內部查詢獲取表中每個'name'的最高ID號,然後外部查詢使用這些ID來獲取這些ID出現的其餘行。

+0

'GROUP BY name' – dmarth 2011-04-18 22:09:09

+0

是的,謝謝。在我提交時遇到這種情況。 – 2011-04-18 22:09:47

+0

這是唯一一個完成這項工作的人。 – 2011-04-18 22:14:11

0

了它終於。

SELECT id, name, url, sum(id) as demosum FROM table_name GROUP BY name ORDER BY ID DESC 

這應該有效。

+0

不,它返回完全不同的結果 – Stofke 2011-04-18 23:28:37

+0

它返回什麼 – Vish 2011-04-18 23:29:05

+0

SELECT max(id),name,url FROM table_name GROUP BY名稱ORDER BY ID ASC – Vish 2011-04-18 23:32:12