我在SQL表中有这个值:
A Column | B Column | C Column
------------------------------
11 | Text1 | 10
11 | Text2 | 20
11 | Text3 | 30
12 | Text4 | 20
12 | Text5 | 15
12 | Text9 | 12
13 | Text60 | 01
13 | Text99 | 05
13 | Text33 | 09
13 | Text0 | 04
我想只得到每个子组中由'A Column'分隔的行,其中我在'C Column'中具有最高值。例如:我会得到:
A Column | B Column | C Column
------------------------------
11 | Text3 | 30
12 | Text4 | 20
13 | Text33 | 09
有人可以帮助我吗?我还在学习sql。
谢谢!
答案 0 :(得分:1)
您可以在t-sql,MS SQL Server中执行以下操作:
;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY A_Column ORDER BY C_Column DESC) AS rn
FROM table_name
)
SELECT *
FROM cte
WHERE rn = 1
请在此处找到类似示例: Get top 1 row of each group
答案 1 :(得分:1)
因为你没有指定RDBMS系统所以我想提供一个适用于几乎所有支持SQL的RDBMS的查询(使用self join
group by
如下所示):< / p>
select tb2.id,tb1.b,tb1.c from
(select t1.b,max(t1.c) c from table_name t1 group by tb1.b) tb1
join table_name tb2 on tb1.b=tb2.b and tb1.c=tb2.c