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
您还可以使用行编号()
函数。这是获得相同结果的另一种方法