从子组值中只获取一个项目

时间:2015-03-24 18:11:48

标签: sql select

我在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。

谢谢!

2 个答案:

答案 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