获取其他列中具有最大值的行的ID

时间:2015-02-02 08:34:17

标签: sql sql-server

我有一张像

这样的表格
+------+-------+-------------------------------------+
| id   | col2  | col3                                |
+------+-------+-------------------------------------+
| 1    | 1     | 10                                  |
| 2    | 1     | 20                                  |
| 3    | 1     | 15                                  |
| 4    | 2     | 10                                  |
| 5    | 2     | 20                                  |
| 6    | 2     | 15                                  |
| 7    | 2     | 30                                  |
+------+-------+-------------------------------------+ 

我想选择其中col3具有最大值且col2 = 2的Id。(在这种情况下为id 7,因为它具有最大值30,其中col2 = 2)。我尝试使用GROUP BY子句

SELECT id, MAX(col3) FROM table_name 
WHERE col2 =2 
GROUP BY id 

但它给了我所有的ID,其中col2 = 2。如何实现所需的输出?

感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用ROW_NUMBER

CREATE TABLE temp(
    ID      INT,
    Col2    INT,
    Col3    INT
)
INSERT INTO temp VALUES 
(1, 1, 10), (2, 1, 20), (3, 1, 15),
(4, 2, 10), (5, 2, 20), (6, 2, 15), 
(7, 2, 30);

SELECT
    ID, Col3
FROM(
    SELECT *, rn = ROW_NUMBER() OVER(PARTITION BY col2 ORDER BY col3 DESC) 
    FROM table_name
)t
WHERE
    rn = 1
    AND col2 = 2

<强> RESULT

ID          Col3
----------- -----------
7           30

答案 1 :(得分:0)

一个简单的子查询将完成这项工作:

SELECT id 
FROM table_name 
WHERE col2 = 2 
AND col3 = (SELECT MAX(col3) FROM table_name WHERE col2=2)

Demo

如果您有多个具有相同最大值的行,如果您不希望使用DISTINCT id或像MAX(id)或{{1}这样的聚合函数,则可以返回多个ID }。

这是使用TOP 1 id的另一种方法:

GROUP BY

答案 2 :(得分:0)

您必须使用以下简单的SQL查询来满足您的要求。

SELECT TOP 1 ID
FROM table_name 
Where col2 = 2
ORDER BY col3 DESC

您也可以使用ROW_NUMBER()功能。这是获得相同结果的另一种方式。