`
wangyanlong0107
  • 浏览: 495065 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】oracle查询:取出每个分组中的第一条记录

 
阅读更多
排序后取第一条记录
select * from (select * from table order by a )C
where rownum=1

oracle查询:取出每组中的第一条记录
按type字段分组,code排序,取出每组中的第一条记录

 

方法一:

 

select type,min(code) from group_info 
group by type;

 

注意:select 后面的列要在group by 子句中,或是用聚合函数包含,否则会有语法错误。

 

方法二:

 

SELECT * FROM(
SELECT z.type , z.code ,ROW_NUMBER()
OVER(PARTITION BY z.type ORDER BY z.code) AS code_id
FROM group_info z
)
WHERE code_id =1;

 

这里涉及到的over()是oracle的分析函数

 

参考sql reference文档:

 

Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions in that they return multiple rows for each group.

 

Analytic functions are the last set of operations performed in a query except for the final ORDER BY clause. All joins and all WHERE , GROUP BY , and HAVING clauses are completed before the analytic functions are processed. Therefore, analytic functions can appear only in the select list or ORDER BY clause.

 

语法结构:

 

analytic_function ([ arguments ]) OVER
 (analytic_clause)

其中analytic_clause结构包括:

 

[ query_partition_clause ]
[ order_by_clause [ windowing_clause ] ]

 

也就是:函数名( [ 参数 ] ) over( [ 分区子句 ]  [ 排序子句 [ 滑动窗口子句 ] ])

 

     这里PARTITION BY 引导的分区子句类似于聚组函数中的group by,排序子句可看成是select语句中的order by.

===================================================================================

对多数据进行分组排序后取每组第一条记录

 

Sql代码  收藏代码
  1. SELECT *  
  2.   FROM (SELECT ROW_NUMBER() OVER(PARTITION BY <PK_FINANCE_ACCOUNT_1> ORDER BY <amassdate> DESC) LEV,  
  3.                <hx_amass_liquid>.*  
  4.           FROM <hx_amass_liquid>)  
  5.  WHERE LEV = 1  
  6.  ORDER BY <PK_FINANCE_ACCOUNT_2> DESC  

 

<PK_FINANCE_ACCOUNT_1> -- 分组列 

 

<amassdate> -- 排序列

 

<hx_amass_liquid> -- 表名

 

<PK_FINANCE_ACCOUNT_2> -- 排序列

 

:<hx_amass_liquid>.* -- 一定要有表名,否则会报“缺失表达式”错误

 

==========================================================

 

分组时不仅想取每组的第一条记录,还想取每组共有几条记录

 

SELECT *
FROM (

 

SELECT ROW_NUMBER() OVER(PARTITION BY PK_FINANCE_ACCOUNT ORDER BY amassdate DESC) LEV,
            

             count(0) over(partition by PK_FINANCE_ACCOUNT) cnt,

             

             hx_amass_liquid.*
 FROM

 

 hx_amass_liquid

 

)


 WHERE LEV = 1
 ORDER BY PK_FINANCE_ACCOUNT DESC

分享到:
评论

相关推荐

    oracle中取中间记录的方法

    1. **第一步**:通过设置`ROWNUM 来获取前10条记录。 2. **第二步**:通过设置`ROWNUM 来获取前4条记录。 3. **最后一步**:使用`MINUS`操作符去除这两部分的交集,即为我们要找的中间记录。 具体的SQL语句如下所示...

    oracle汉字转拼音

    -- 可能需要对全拼进行处理,取出第一个字母 END; PROCEDURE 拼音截取 (p_hanzi IN VARCHAR2, p_start IN NUMBER, p_length IN NUMBER, p_sub_pinyin OUT VARCHAR2) IS -- 在这里实现拼音截取的逻辑 BEGIN --...

    一个oracle根据特定字符截取数据

    这里 `INSTR(data_column, ',', 1)` 找到逗号的第一个位置,然后 `SUBSTR()` 从开始位置1截取到逗号之前的所有字符。 在实际应用中,可能还需要处理更复杂的情况,比如截取最后一个值、处理缺失或多个分隔符的情况...

    Oracle数据库中分页查询介绍

    因此,当第一行被取出时(ROWNUM=1),它将不满足条件而被排除,接着第二行(ROWNUM=2)也会被排除,如此反复,直到查询结束。正确的做法是先获取前49行,然后在子查询中过滤出30至49行: ```sql select * from ( ...

    Oracle 数据库应用:第13章 配置Oracle互联.ppt

    在TCP环境下,每个服务器进程都会获得一个唯一的端口号,以便于客户端直接与其通信。 此外,还需要配置Oracle Net服务别名,这使得客户端可以使用友好的名称来连接数据库,而不是直接使用IP地址和端口号。服务别名...

    SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)

    Sqlserver 获取每组中的第一条记录 在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面、功能下面,从数据库...下面给大家介绍oracle查询取出每组中的

    oracle 全文检索实现

    在检索时,从索引文件取出主键及表名,查询数据库来显示这一条记录的详细信息。 Oracle 全文检索实现的总体架构图由五个部分组成:XML 配置文件、读取器、索引器、索引库和检索器。其中,XML 配置文件存储数据库的...

    Oracle第三次考试答案

    - 根据给定的课程时间表,可以编写一个PL/SQL程序,使用嵌套循环和条件语句,以星期为列头,学生为行头,展示每个学生每天上的课程。 4. 游标类型: - 静态游标:包括隐式游标(系统自动管理)和显示游标(用户...

    Oracle分页查询

    - **第一种写法**:在Cost-Based Optimizer (CBO)模式下,Oracle能够将外层的查询条件推到内层查询中,从而提高查询效率。例如,`WHERE ROWNUM 可以被推入到内层查询,使得当查询结果超过40行时,查询就会提前终止。...

    Oracle SQL基础培训_练习.ppt

    - 查询所有供应商名称及其所属城市,按城市名称降序排列,分页显示,每页2条记录,取出第2页数据。Oracle SQL使用ROWNUM实现分页,但要注意ROWNUM必须配合子查询或者WITH语句: ```sql SELECT * FROM ( SELECT ...

    java解析emoji表情存入oracle,并正常使用

    每个emoji由两个UTF-16编码组成,可以使用Java的`Character.toChars()`方法将其转换为字节数组,然后存入数据库的BLOB或CLOB字段。 在给定的文件列表中,`emoji-java-4.0.0.jar`是一个用于处理emoji的Java库,它...

    Oracle 设计高级编码

    - **FIRST_VALUE(col) OVER (PARTITION BY col ORDER BY col)**: 返回按`col`排序后第一个分区中的第一行的值。 - **LAST_VALUE(col) OVER (PARTITION BY col ORDER BY col)**: 返回按`col`排序后第一个分区中的最后...

    最全的oracle函数大全

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的内置函数,以方便用户进行数据处理和查询。以下是一些在Oracle中常用的函数,这些函数在数据库操作中扮演着重要角色。 1. ASCII函数:ASCII函数...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;svrmgrl SVRMGR&gt;connect internal SVRMGR&gt;startup ...

    oracle110个常用函数

    4. INITCAP函数:此函数将字符串中的每个单词首字母转换为大写,其余字母转换为小写。例如,INITCAP('smith')返回'Smith'。 5. INSTR函数:INSTR函数用于在一个字符串中查找另一个字符串的起始位置。参数C1是被搜索...

    使用Oracle游标实现多级展开菜单树.pdf

    游标从结果集的第一条记录开始遍历,比较当前记录与上一条记录的字段,如果发现连续的两条记录具有相同的父节点ID,那么就可以将它们合并,删除冗余。同时,根据排列顺序编号对菜单进行排序,确保菜单树的正确展开。...

    Oracle SQL内置函数大全

    4. INITCAP函数:将字符串中每个单词的首字母转换为大写,其余字母保持原样。如INITCAP('smith')返回'Smith'。 5. INSTR函数:它在C1字符串中查找C2字符串的出现位置,可指定开始位置I(默认1)和出现次数J(默认1...

    oracle110个常用函数.docx

    这个函数将字符串中的每个单词的首字母转换为大写,其余字母转换为小写。如INITCAP('smith')返回'Smith'。 5. INSTR 函数: INSTR函数在字符串C1中查找C2出现的位置。INSTR(C1, C2, I, J)中,I表示开始搜索的位置...

    oracle e-business suite 功能流程详解

    状态管理对于跟踪物品的生命周期至关重要,包括但不限于待审、批准、废弃等状态,确保物品从入库到出库的每个环节都处于可控状态。 #### Review Catalog 目录审查则是对物品进行分组展示的过程,方便用户根据目录...

    Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解

    position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大小写进行检索;’c’区分大小写进行检索。默认为’c’) SELECT REGEXP_...

Global site tag (gtag.js) - Google Analytics