要求查询每个用户对应的最大样品信息,忽然想到ms sql提供过 row_number() over(partition by 列 order by 列 desc),那么oracle可能也存在,

我的表结构如下:

create table NEOGOODSRULE
(
  ID          NUMBER(22) not null,
  PERSONALID  NVARCHAR2(50),
  CT_SMP_TYPE NVARCHAR2(100)
)
tablespace VGSM
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

数据如下:

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2270, 'JYZ', '原料');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2271, 'JYZ', '辅料');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2359, 'SYSTEM', '包材(内)');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2360, 'SYSTEM', '包材(外)');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2361, 'SYSTEM', '原料');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2362, 'SYSTEM', '成品');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2363, 'SYSTEM', '稳定性(加速)');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2364, 'SYSTEM', '稳定性(长期)');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2365, 'SYSTEM', '辅料');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2354, 'LY', '成品');

insert into neogoodsrule (ID, PERSONALID, CT_SMP_TYPE)
values (2355, 'LY', '原料');

ROW_NUMBER()语法如下:

1、row_number() over(order by column asc)先对列column按照升序,再为每条记录返回一个序列号:

select personalid,row_number() over(order by personalid asc) rn from  neogoodsrule

2、row_number() over(partition by column1 order by column2 asc) 先按照column1分组,再对分组后的数据进行以column2升序排列

select personalid,ct_smp_type,row_number() over(partition by personalid order by ct_smp_type asc) rn from neogoodsrule

由此,开始所提的需求sql代码如下

select * from (select personalid,ct_smp_type,row_number() over(partition by personalid order by ct_smp_type asc) rn from neogoodsrule )
where rn=1

使用row_number()分页函数取代group by。例如:语句1:
select col1,col2 from t where col1 in (select col1 from t group by col1 having count(*) <=2 ) order

by order col2;
语句1可以用下面的语句取代:
语句2:
select col1,col2 from (select *,row_number() over(partition by col1 order by col2) as p_group from

t) where p_group<=2 ;

ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根据COL1分组,在分组内部根据 COL2排序。而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的

)。

----------------------------------------------------------------------------------

   select a,b,c,sum(c)over(partition by a) from t2                
   得到结果:
   A   B   C        SUM(C)OVER(PARTITIONBYA)      
   -- -- ------- ------------------------ 
   h   b   3        3                        
   m   a   2        4                        
   m   a   2        4                        
   n   a   3        6                        
   n   b   2        6                        
   n   b   1        6                        
   x   b   3        9                        
   x   b   2        9                        
   x   b   4        9                        
  
   如果用sum,group by 则只能得到
   A   SUM(C)                            
   -- ---------------------- 
   h   3                      
   m   4                      
   n   6                      
   x   9                      
   无法得到B列值  
---------------------------------------------------------------------------------------------

RANK() OVER (PARTITION BY COL1 ORDER BY COL2)
类似,不过RANK 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名。

dense_rank() OVER (PARTITION BY COL1 ORDER BY COL2)
类似。是连续排序,有两个第二名时仍然跟着第三名。

dept sal emp row_number rank dense_rank
---- ------- ----- ---------- ----- ----------
10 5000.00 7839 1 1 1
10 2450.00 7782 2 2 2
10 1300.00 7934 3 3 3
20 3000.00 7788 1 1 1
20 3000.00 7902 2 1 1
20 2975.00 7566 3 3 2
20 1100.00 7876 4 4 3
20 800.00 7369 5 5 4
30 2850.00 7698 1 1 1
30 1600.00 7499 2 2 2

在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果

oracle row_number()的更多相关文章

  1. oracle row_number() over(partition by .. order by ..)和rank() over(partition by .. order by ..) 和dense_rank() over(partition by .. order by ..)的相似点与区别

    新建一个测试表 create table dim_ia_test2(device_number varchar2(20),desc2 varchar2(20)) 插入数据后得到: 一.oracle r ...

  2. oracle ROW_NUMBER用法

    Oracle中row_number().rank().dense_rank() 的区别 row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复 使 ...

  3. 问题:oracle ROW_NUMBER()over;结果: ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法

    ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法 ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组, ...

  4. oracle ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)

    工作中遇到的一个问题,需要对某列进行分组排序,取其中排序的第一条数据项 用到了ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)来解决此问题. 实例准 ...

  5. oracle row_number的使用

    create table studentInfo(  id number(8) primary key,  name varchar2(20) not null,  ObjectName varcha ...

  6. Oracle row_number() over() 分析函数--取出最新数据

    语法格式:row_number() over(partition by 分组列 order by 排序列 desc) 一个很简单的例子 1,先做好准备 create table test1( id v ...

  7. oracle ROW_NUMBER() OVER(PARTITION BY '分组' ORDER BY '排序' DESC) 用法

    转载:https://blog.csdn.net/dbagaoshou/article/details/51330829 SELECT * FROM ( SELECT ROW_NUMBER() OVE ...

  8. MySQL 实现 Oracle row_number over 数据排序功能

    一.方法一GROUP_CONCAT.SUBSTRING_INDEX 1.GROUP_CONCAT 2.SUBSTRING_INDEX 3.例子 首先我们可以首先根据job_id 排序然后根据start ...

  9. 工作中 sql 整理(一)

    这篇文章记录关于SQL的内容,有些凌乱,是工作中点滴的积累,只能按照时间顺序,逐次记录. 一.update 关联更新 1.需求 Table A   TableB A表中的主键和B表中的主键相关联,关联 ...

随机推荐

  1. PHP Forms

    <html><body><form action="welcome.php" method="post">Name: < ...

  2. Blocks_DP&&矩阵快速幂

    参考资料:http://www.tuicool.com/articles/beiyAv [题意]有n块砖.现要将砖全部染上红.蓝.绿.黄四种颜色.要求被染成红色和绿色的砖块数量必须为偶数,问一共有多少 ...

  3. EnterpriseLibrary4 自己封装程序集实现log打印

      注意:1)要引用响应的程序集,必须是41的          2)配置文件 using Microsoft.Practices.EnterpriseLibrary.Common.Configura ...

  4. Inno Setup入门(十一)——完成安装后执行某些程序

    Inno Setup入门(十一)——完成安装后执行某些程序 2011-02-16 16:24:23|  分类: Inno Setup |  标签:inno  setup   |举报 |字号 订阅   ...

  5. /bin/bash^M: bad interpreter: 没有那个文件或目录

  6. magento 多域名多店铺

    事前指导 我们使用的就是parked domain ,将你要添加的域名指向你的现有magento 文件根目录. 就像预习中提到的,我们有个magento站域名为one.com ,添加新的域名two.c ...

  7. Ubuntu安装文泉驿-微米黑字体

    sudo apt-get install ttf-wqy-microhei #文泉驿-微米黑

  8. csdn第三名

    编号:1026时间:22016年7月18日11:10:35功能:csdn第三名URL :http://blog.csdn.net/phphot

  9. spark读hdfs文件实现wordcount并将结果存回hdfs

    package iie.udps.example.operator.spark; import scala.Tuple2; import org.apache.spark.SparkConf; imp ...

  10. 跟开涛老师学shiro -- INI配置

    之前章节我们已经接触过一些INI配置规则了,如果大家使用过如spring之类的IoC/DI容器的话,Shiro提供的INI配置也是非常类似的,即可以理解为是一个IoC/DI容器,但是区别在于它从一个根 ...