MySQL запрос, чтобы получить все самые высокие идентификаторы - PullRequest
1 голос
/ 19 апреля 2011

У меня есть таблица или запрос результата, как это.

    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  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

Ответы [ 4 ]

1 голос
/ 19 апреля 2011
SELECT id, name, url
FROM yourtable
WHERE id IN (SELECT max(id) FROM yourtable GROUP BY name))

Внутренний запрос выбирает наибольший номер идентификатора для каждого «имени» в таблице, затем внешний запрос использует эти идентификаторы для выборки оставшихся строк, в которых встречаются эти идентификаторы.

0 голосов
/ 19 апреля 2011

Понял наконец.

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

Это должно сработать.

0 голосов
/ 19 апреля 2011

Это решение работает без использования 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. Определенно, это не SARGable (я не уверен на 100%, что мое решение таково)Concat (1,'1AAA')
0 голосов
/ 19 апреля 2011

Добавить GROUP BY id ORDER BY id ASC

Что-то вроде

SELECT id, name, url FROM yourtable GROUP BY id ORDER BY id ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...