SQL, как найти строки, которые имеют наибольшее значение конкретного столбца - PullRequest
3 голосов
/ 26 июля 2010

Например, в таблице есть столбцы MYINDEX и NAME.

MYINDEX | NAME
=================
1       | BOB
2       | BOB
3       | CHARLES

Как мне найти строку с самым высоким MYINDEX для конкретного ИМЯ? Например. Я хочу найти ROW-2 для имени "BOB".

Ответы [ 6 ]

12 голосов
/ 26 июля 2010

SELECT Max(MYINDEX) FROM table WHERE NAME = [insertNameHere]

РЕДАКТИРОВАТЬ: получить весь ряд:

Select * //never do this really
From Table
Where MYINDEX = (Select Max(MYINDEX) From Table Where Name = [InsertNameHere]
4 голосов
/ 26 июля 2010
SELECT MAX(MYINDEX) FROM table
WHERE NAME = 'BOB'

Для всего ряда выполните:

SELECT * FROM table
WHERE NAME = 'BOB'
AND MyIndex = (SELECT Max(MYINDEX) from table WHERE NAME = 'BOB')
3 голосов
/ 26 июля 2010

Есть несколько способов справиться с этим. Я предполагаю, что могут быть другие столбцы, которые вы хотите из строки, в противном случае, как сказали другие, просто имя, MAX(my_index) ... GROUP BY name будет работать. Вот пара примеров:

SELECT
    MT.name,
    MT.my_index
FROM
(
    SELECT
        name,
        MAX(my_index) AS max_my_index
    FROM
        My_Table
    GROUP BY
        name
) SQ
INNER JOIN My_Table MT ON
    MT.name = SQ.name AND
    MT.my_index = SQ.max_my_index

Другое возможное решение:

SELECT
    MT1.name,
    MT1.my_index
FROM
    My_Table MT1
WHERE
    NOT EXISTS
    (
        SELECT *
        FROM
            My_Table MT2
        WHERE
            MT2.name = MT1.name AND
            MT2.my_index > MT1.my_index
    )
0 голосов
/ 10 августа 2017

Если вы хотите пропустить внутреннее соединение, вы можете сделать:

SELECT * FROM table WHERE NAME = 'BOB' ORDER BY MYINDEX DESC LIMIT 1;
0 голосов
/ 26 июля 2010

Если вы хотите увидеть самый высокий индекс для name = 'Bob', используйте:

SELECT MAX(MYINDEX) AS [MaxIndex]
FROM myTable
WHERE Name = 'Bob'
0 голосов
/ 26 июля 2010

Используйте

FROM TABLE SELECT MAX(MYINDEX), NAME GROUP BY NAME 
...