你可以使用 Oracle 数据库中的 ROW_NUMBER()
窗口函数来实现这个需求。该函数能够在每个分组内对行进行编号,然后我们可以选择每个分组中 number
最大的那一行。
以下是一个示例 SQL 查询,演示如何根据 id
分组,并获取 number
最大的对象:
SELECT id, number, name
FROM (
SELECT
id,
number,
name,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY number DESC) AS rn
FROM your_table
)
WHERE rn = 1;
在这个查询中:
- 内部查询 (
FROM your_table
) 使用ROW_NUMBER()
窗口函数对每个id
分组内的数据进行编号,并且按照number
降序排列。 ROW_NUMBER() OVER (PARTITION BY id ORDER BY number DESC)
这部分代码会在每个id
分组内,根据number
降序为每行分配一个唯一的行号。- 外部查询通过
WHERE rn = 1
筛选出每个分组中number
最大的那一行,因为在按number
降序排列后,行号为 1 的就是number
最大的那一行。
请将 your_table
替换为你的实际表名。
示例数据:
id | number | name |
---|---|---|
1 | 1 | 第1个人 |
1 | 2 | 第2个人 |
2 | 1 | 第3个人 |
2 | 2 | 第4个人 |
3 | 1 | 第5个人 |
3 | 2 | 第6个人 |
3 | 3 | 第7个人 |
查询结果:
id | number | name |
---|---|---|
1 | 2 | 第2个人 |
2 | 2 | 第4个人 |
3 | 3 | 第7个人 |
这段 SQL 查询能正确地返回每个 id
分组中 number
最大的那一行数据。