从子组值中仅获取一项
Get only one item from a subgroup values
我的 SQL table:
中有这个值
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。
谢谢!
您可以在 t-sql, MS SQL 服务器中按如下方式进行:
;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
因为您没有指定 RDBMS 系统,所以我想提供一个适用于几乎所有支持 SQL 的 RDBMS 的查询(使用 self join
和 group by
之类的下面):
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
我的 SQL table:
中有这个值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。
谢谢!
您可以在 t-sql, MS SQL 服务器中按如下方式进行:
;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
因为您没有指定 RDBMS 系统,所以我想提供一个适用于几乎所有支持 SQL 的 RDBMS 的查询(使用 self join
和 group by
之类的下面):
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