语法格式:row_number() over(partition by 分组列 order by 排序列 desc)

一个很简单的例子

1,先做好准备

create table test1(
id varchar(4) not null,
name varchar(10) null,
age varchar(10) null
); select * from test1; insert into test1(id,name,age) values(1,'a',10);
insert into test1(id,name,age) values(1,'a2',11);
insert into test1(id,name,age) values(2,'b',12);
insert into test1(id,name,age) values(2,'b2',13);
insert into test1(id,name,age) values(3,'c',14);
insert into test1(id,name,age) values(3,'c2',15);
insert into test1(id,name,age) values(4,'d',16);
insert into test1(id,name,age) values(5,'d2',17);

2,开始使用之

按照id进行分组,age进行排序,数据展示为按照相同的id分组,age从小到大排序:

select t.id,
t.name,
t.age,
row_number() over(partition by t.id order by t.age asc) rn
from test1 t

结果:

  id   name    age    rn

  1   a    10   1
  1   a2    11    2
  2   b    12   1
  2   b2    13   2
  3   c    14   1
  3   c2    15    2
  4   d    16   1
  5   d2   17   1

3,进一步排序

按照id进行分组,age进行排序,数据展示为按照相同的id分组,age从小到大排序,并取出相同id中年龄最小的一条

select * from (select t.id,
t.name,
t.age,
row_number() over(partition by t.id order by t.age asc) rn
from test1 t) where rn < 2

结果:

   id    name   age    rn

  1   a   10   1
  2   b   12   1
  3   c   14   1
  4   d   16   1
  5   d2   17    1

4,总结

  工作半年的经验来看,基本上row_number() over()这个函数主要用在各种数据统计的sql中,感觉比group by好用的都,可以在一个查询中对多列数据进行分组,尤其在多表关联查询中,row_number() over()还是非常便捷的。

整理自:https://www.cnblogs.com/moon-jiajun/p/3530035.html

Oracle row_number() over() 分析函数--取出最新数据的更多相关文章

  1. 【记录】T-SQL 分组排序中取出最新数据

    示例 Product 表结构: 示例 Product 表数据: 想要的效果是,以 GroupName 字段分组,取出分组中通过 Sort 降序最新的数据,通过示例数据,可以推算出结果数据的 ID 应该 ...

  2. ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法

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

  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内置分析函数进行高效统计汇总

      分析函数是Oracle从8.1.6开始引入的一个新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现 ...

  5. Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)解决

    环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener ...

  6. 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 ...

  7. React-Native 之 GD (十二)海淘半小时热门 及 获取最新数据个数功能 (角标)

    1.海淘半小时热门   基本功能和首页相似 GDHt.js /** * 海淘折扣 */ import React, { Component } from 'react'; import { Style ...

  8. Android网络开发之实时获取最新数据

    在实际开发中更多的是需要我们实时获取最新数据,比如道路流量.实时天气信息等,这时就需要通过一个线程来控制视图的更新. 示例:我们首先创建一个网页来显示系统当前的时间,然后在Android程序中每隔5秒 ...

  9. ffmpeg从AVFrame取出yuv数据到保存到char*中

    ffmpeg从AVFrame取出yuv数据到保存到char*中   很多人一直不知道怎么利用ffmpeg从AVFrame取出yuv数据到保存到char*中,下面代码将yuv420p和yuv422p的数 ...

随机推荐

  1. Loader ,URLLoader ,URLStream的区别

    AS3代码   (1)  Loader              Loader 类可用于加载 SWF 文件或图像(JPG.PNG 或 GIF)文件. 使用 load() 方法来启动加载. 被加载的显示 ...

  2. 在内网中 vue项目添加ECharts图表插件

    原文地址:https://www.cnblogs.com/aknife/p/11753854.html 最近项目中要使用到图表 但是项目在内网中无法直接使用命令安装 然后我在外网中弄个vue的项目(随 ...

  3. Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE

    删除logs文件夹日志即可

  4. oralce数据表空间满了

    --切换至oralce用户 su - oracle--执行sqlplus / as sysdba --查询表空间使用情况SELECT Upper(F.TABLESPACE_NAME) "表空 ...

  5. string.join用法

    C# String.Join用法 String.Join(String, String[]) 在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串 例如: ...

  6. 怎样用 vue-i18n这个结合vue的$t来实现通过data传值的翻译

    <el-row class="searchForm"> <template v-for="(item,index) in searchConfig&qu ...

  7. SYBASE扩充日志段空间

    有时候日志段空间满了使用下列语句也无济于事,又不能直接重启库,就加空间应急,dump tran QAS with truncate_only dump tran QAS with no_log sp_ ...

  8. SuperTab

    Tab快捷键提示功能 下载 http://www.vim.org/scripts/script.php?script_id=1643 安装 # vi supertab.vmb : UseVimball ...

  9. mysql死锁检查

    1.查看当前数据库进程 show processlist;   show full processlist; #前者只显示前100条,后者显示所有的进程 2.一键杀死某个用户的所有进程 select ...

  10. 尚硅谷MySQL基础学习笔记

    目录 写在前面 MySQL引入 数据库的好处 数据库的相关概念 数据库存储数据的特点 MySQL服务的启动和停止 MySQL服务端的登录和退出 MySQL的常用命令 MySQL语法规范 DQL(Dat ...