SQL如何查找具有特定列最高值的行

5
例如,表格包含MYINDEX和NAME两列。
MYINDEX | NAME
=================
1       | BOB
2       | BOB
3       | CHARLES

如何找到特定名称的最高MYINDEX行?例如,我想要查找名称为“BOB”的ROW-2。


5
编辑,求你不要用散文来描述表格。 - Evan Carroll
6个回答

12

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]

2
他想要整行,而不仅仅是该列的最大值。 - µBio
@Lucas Heneks:在修改之前,我对它的理解不是这样的。大多数最初的帖子也不是这样,所以当我写答案时,我倾向于认为我的解释是正确的。即将进行的编辑将回答他实际的问题。 - AllenG
点赞了你的编辑。但是他最初未经编辑的问题“如何找到特定名称中MYINDEX最高的行?”肯定是要求该行的:) - µBio

4
SELECT MAX(MYINDEX) FROM table
WHERE NAME = 'BOB'

对于整行,请执行以下操作:

SELECT * FROM table
WHERE NAME = 'BOB'
AND MyIndex = (SELECT Max(MYINDEX) from table WHERE NAME = 'BOB')

4

有几种方法可以解决这个问题。我假设您可能需要行中的其他列,否则就像其他人所说的那样,只需使用名称,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
如果您想跳过内连接,可以这样做:
SELECT * FROM table WHERE NAME = 'BOB' ORDER BY MYINDEX DESC LIMIT 1;

0
如果您想查看 name = 'Bob' 的最高索引,请使用:
SELECT MAX(MYINDEX) AS [MaxIndex]
FROM myTable
WHERE Name = 'Bob'

我实际上想找到名字对应的最高索引的行,而不仅仅是名字的最高索引。 - SharpAffair

-1

使用

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接