簡體   English   中英

MySQL查詢以獲取所有最高ID

[英]MySQL query to get all highest id's

我有這樣的表或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
SELECT id, name, url
FROM yourtable
WHERE id IN (SELECT max(id) FROM yourtable GROUP BY name))

內部查詢為表中的每個“名稱”獲取最高的ID號,然后外部查詢使用這些ID提取ID所在的其余行。

添加GROUP BY id ORDER BY id ASC

就像是

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

此解決方案無需使用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)可能有效,但是存在兩個問題。

  1. 它絕對不可救葯(我不是100%確定我的解決方案是)
  2. 如果有人輸入諸如1AAA之類的名稱,則會引起問題,因為Concat(11,'AAA') = Concat (1,'1AAA')

終於明白了。

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

這應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM