`

oracle的ROW_NUMBER() OVER函数的基本用法

 
阅读更多

 转自:http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html

 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

 

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

 

例子1:row_number中有1,2,3等数字

SElECT row_number() over(partition by b.agency_item_id, c.processinst_id order by c.createdate desc) row_num,
                    b.agency_item_id,
                    b.agency_id,
                    d.*
               FROM tb_bgt_dept_status b
               join tb_bgt_ref_dept_wf c
                 on b.id = c.bgt_wf_id
               join v_wf_working d
                 on c.processinst_id = d.PROCINSTID
              where b.annual = 2016

注意:例1的图见下面

 

 

 

例子2:都是数字1

SElECT row_number() over(partition by b.agency_item_id, c.processinst_id order by c.createdate desc) row_num,
                    b.agency_item_id,
                    b.agency_id,
                    d.*
               FROM tb_bgt_dept_status b
               join tb_bgt_ref_dept_wf c
                 on b.id = c.bgt_wf_id
               join v_wf_working d
                 on c.processinst_id = d.PROCINSTID
              where b.annual = 2016

)where row_num=1

注意:例子2见图2

 

 

第二:查询是否出现一次,查询出现几次

    select count(agency_id) ,t.agency_id  from tb_plan_info t group by t.agency_id

 

 

---------------------------------------------------------------------------------------以下是两个sql对比,效果是一样的。

流程中找到当前实例的当前最大环节的两种做法(查看流程图)

sql1:如下:按照流程实例和操作流程用户进行分组。找到该流程实例中现在操作的最后一个流程

  SELECT VW.*
 FROM V_WF_WORKDONE VW,
 (SELECT PROCINSTID, USERID, MAX(TASK_END_TIME) MAXENDDATE
  FROM V_WF_WORKDONE
  GROUP BY PROCINSTID, USERID) VT
  WHERE VW.TASK_END_TIME = VT.MAXENDDATE
  AND VW.PROCINSTID = VT.PROCINSTID
  AND VW.USERID = VT.USERID

 

 

sql2:如下:先按照流程实例和用户进行分组,然后在按照时间排序,最后取第一条数据

SELECT row_number() over(partition by v.PROCINSTID, v.USERID order by v.TASK_END_TIME desc) row_num,
       v.TASKINSTID,
       v.USERID,
       v.PROCINSTID,
       v.taskdef,
       v.TASK_END_TIME
  FROM v_wf_workdone v where row_num=1

 

  • 大小: 63 KB
  • 大小: 59 KB
分享到:
评论

相关推荐

    Oracle row_number()over

    row_number()over 函数的基本语法为: ``` row_number() over ([partition by col1] order by col2) as 别名 ``` 其中,`partition by col1` 用于指定分区的列,`order by col2` 用于指定排序的列。 在使用 row_...

    oracle row_number用法

    除了以上基础用法外,`ROW_NUMBER()`还可以与其他窗口函数组合使用,实现更复杂的数据分析需求。例如,结合`LAG()`和`LEAD()`函数可以实现数据的前后对比;与`RANK()`和`DENSE_RANK()`结合则可以进一步细化排序逻辑...

    oracle分析函数row_number() over()使用

    下面我们将详细讨论`ROW_NUMBER() OVER()`的使用方法及其在不同场景下的应用。 首先,`ROW_NUMBER() OVER()`的基本语法是: ```sql ROW_NUMBER() OVER ( [PARTITION BY column1, column2, ...] ORDER BY column3...

    oracle的row_numer()函数的使用

    介绍了 row_number() over(order by column asc) 函数和 row_number() over(partition by column1 order by column2 asc) 的使用实例和方法

    row_number,根据多个字段过滤,partition by

    通过上述方法,我们可以有效地利用`ROW_NUMBER()`函数与`PARTITION BY`子句来解决基于多个字段的过滤问题。这种方法不仅适用于本案例中的教师表,也广泛适用于任何需要根据多个字段去除重复记录的场景。此外,这种...

    深入探讨:oracle中row_number() over()分析函数用法

    Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...

    Oracle row_number() over()解析函数高效实现分页

    Oracle数据库中的`row_number() over()`函数是一种窗口函数,它在处理数据分页时非常有用。这个函数可以为查询结果集中的每一行分配一个唯一的行号,这些行号基于一个指定的排序规则。在此场景中,我们将探讨如何...

    RANK OVER()和ROW_NUMBER()OVER的使用

    介绍rank() over()分析函数和 row_number() over 的使用实例及其异同点

    oracle中rownum和row_number()

    row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的...

    Oracle开发之分析函数(Rank, Dense_rank, row_number)

    Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...

    ORACLE_OVER函数

    OVER函数通常与窗口函数(如RANK(), DENSE_RANK(), ROW_NUMBER(), SUM(), AVG()等)一起使用。其基本语法形式如下: ```sql <window_function> OVER ( [window_spec] ) ``` 其中`<window_function>`代表具体的窗口...

    Oracle数据库rownum和row_number的不同点

    相比之下,`ROW_NUMBER()` 是一种窗口函数(分析函数),它在SQL标准中定义,Oracle 10g及以上版本开始支持。`ROW_NUMBER()` 可以根据指定的排序规则为每一行分配一个唯一的序号,同样从1开始。与 `ROWNUM` 不同,`...

    使用row_number()实现分页实例

    内部查询使用`ROW_NUMBER()`函数,按照`Id`字段对`News`表中的记录进行排序,并为每行生成一个行号`[$Row_Num]`。`OVER`子句定义了排序的顺序,这里是根据`Id`升序排列。 外部查询从临时表 `_temp` 中选择行,只...

    Oracle分析函数基本概念和语法总结及Regexp_***用法

    Oracle分析函数是数据库管理系统Oracle中的一种高级查询工具,它们用于处理行集,计算基于特定窗口内的数据的聚合值。分析函数的主要特点是返回的结果不仅仅是一行,而是多行,这与传统的聚合函数(如SUM, AVG等)...

    ORACLE 常用分析函数

    分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述  ROW_NUMBER () OVER([partition_clause]...

    oracle分析函数

    ### Oracle分析函数详解:row_number() over 在Oracle数据库中,分析函数(Analytic Functions)是一种强大而灵活的数据处理工具,它们能够在查询结果集中对每一行数据进行计算,而不像传统的聚合函数那样只返回...

Global site tag (gtag.js) - Google Analytics