oracle 分组后取每组第一条数据

本文介绍了一种使用SQL实现的分组取第一条记录的方法。通过ROW_NUMBER()窗口函数结合子查询,可以有效地从每个分组中选取满足条件的第一条记录。此技巧在处理需要按特定顺序获取分组内首个元素的场景时非常实用。

‘数据格式

分组取第一条的效果


sql

 

 SELECT *       
    FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn,       
          test1.*       
          FROM test1)       
   WHERE rn = 1  ;     


 

 

转载于:https://www.cnblogs.com/dyllove98/p/3206423.html

### Oracle 中按 GROUP BY 分组每组第一条记录的查询方法 在 Oracle 数据库中,可以通过使用分析函数 `ROW_NUMBER()` 来实现对数据按某个字段分组,并从每组中提第一条记录。以下是一个详细的实现方法和解释。 #### 使用 `ROW_NUMBER()` 实现分组第一条记录 `ROW_NUMBER()` 是一个分析函数,用于为每一行分配一个唯一的序号,基于指定的分区和排序规则。以下是具体的 SQL 示例: ```sql SELECT type, code FROM ( SELECT z.type, z.code, ROW_NUMBER() OVER (PARTITION BY z.type ORDER BY z.code) AS rn FROM group_info z ) WHERE rn = 1; ``` - 在子查询中,`ROW_NUMBER()` 函数通过 `PARTITION BY z.type` 将数据按 `type` 字段进行分组[^1]。 - 每组内的记录按照 `ORDER BY z.code` 进行排序[^2]。 - 外层查询通过 `WHERE rn = 1` 筛选每组中的第一条记录。 #### 具体语法解析 根据 Oracle 的分析函数文档,分析函数的结构如下: ```plaintext analytic_function ([ arguments ]) OVER (analytic_clause) ``` 其中 `analytic_clause` 包括: - `query_partition_clause`:由 `PARTITION BY` 引导,用于定义分组逻辑[^2]。 - `order_by_clause`:由 `ORDER BY` 引导,用于定义每组内记录的排序规则[^2]。 #### 示例扩展 如果需要从另一个表中提类似的结果,可以参考以下 SQL: ```sql SELECT type, money FROM ( SELECT t.type, t.money, ROW_NUMBER() OVER (PARTITION BY t.type ORDER BY t.time DESC) AS rn FROM table1 t ) WHERE rn = 1; ``` - 在此示例中,`ORDER BY t.time DESC` 表示每组内的记录按照时间字段降序排列[^2]。 - 最终筛选每组中时间最新的第一条记录。 #### 注意事项 1. `ROW_NUMBER()` 函数会为每一行分配唯一的序号,因此即使存在重复值,也不会影响结果。 2. 如果需要处理更复杂的逻辑(例如窗口函数或滑动窗口),可以结合 `windowing_clause` 使用[^2]。 #### 总结 通过使用 `ROW_NUMBER()` 分析函数,可以高效地实现按 `GROUP BY` 分组每组第一条记录的需求。上述方法不仅适用于简单场景,还可以扩展到更复杂的业务需求中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值