Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取在其他列中具有最大值的行的ID_Sql_Sql Server - Fatal编程技术网

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

Sql 获取在其他列中具有最大值的行的ID,sql,sql-server,Sql,Sql Server,我有一张像这样的桌子 +------+-------+-------------------------------------+ | id | col2 | col3 | +------+-------+-------------------------------------+ | 1 | 1 | 10 | | 2 | 1 | 20

我有一张像这样的桌子

+------+-------+-------------------------------------+
| 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)。我试着使用GROUPBY子句

SELECT id, MAX(col3) FROM table_name 
WHERE col2 =2 
GROUP BY id 
但是它给了我所有的Id,在这里col2=2。我怎样才能达到预期的输出


谢谢。

您可以使用
行号

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

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

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

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

如果有多行具有相同的最大值,如果您不希望可以使用
DISTINCT ID
或类似
max(ID)
TOP 1 ID
的聚合函数,则可以返回多个ID

下面是另一种使用
分组方式的方法:

SELECT TOP 1 MAX(id)
FROM table_name 
GROUP BY col2, col3
HAVING col2 = 2
ORDER BY col3 DESC

您必须使用以下简单的sql查询来满足您的需求

SELECT TOP 1 ID
FROM table_name 
Where col2 = 2
ORDER BY col3 DESC
您还可以使用
行编号()
函数。这是获得相同结果的另一种方法