oracle/dm查询分组中最大的一条数据:ROW_NUMBER()
你可以使用 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 最大的那一行数据。
浙公网安备 33010602011771号