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;

在这个查询中:

  1. 内部查询 (FROM your_table) 使用 ROW_NUMBER() 窗口函数对每个 id 分组内的数据进行编号,并且按照 number 降序排列。
  2. ROW_NUMBER() OVER (PARTITION BY id ORDER BY number DESC) 这部分代码会在每个 id 分组内,根据 number 降序为每行分配一个唯一的行号。
  3. 外部查询通过 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 最大的那一行数据。

posted on   C_C_菜园  阅读(133)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示