文章目录

  • 1 概述
  • 2 示例
    • 2.1 first_value() + last_value()
    • 2.2 lag() + lead()
  • 3 扩展
    • 3.1 保持排序,且避免返回多行 keep()

1 概述

1. 说明 (1) 均属于 '分析函数': 每行一条记录(不聚合)(2) + over(partition by 列1 order by 列2) -- 一同使用2. first_value() -- 第一个last_value()  -- 最后一个特别注意:是 '第一个' 到 '当前记录' 排行中的 '最后一个'rows between unbounded preceding and current row3. lag()  -- 上一个lead() -- 下一个

2 示例

2.1 first_value() + last_value()

with student_info as (select 1 sno, 'a' sname, 18 age, date '2020-01-01' create_date from dual union allselect 2 sno, 'b' sname, 18 age, date '2020-02-01' create_date from dual union allselect 3 sno, 'c' sname, 18 age, date '2020-03-01' create_date from dual
)
select si.sno,si.sname,si.age,si.create_date,first_value(si.sname) over(partition by si.age order by si.create_date) 第一条记录,last_value(si.sname) over(partition by si.age order by si.create_date) 至当前最后一条记录,first_value(si.sname) over(partition by si.age order by si.create_date desc) 所有记录中最后一条from student_info si;

查询结果:

sno      sname   age     create_date     第一条记录   至当前最后一条记录       所有记录中最后一条
1       a       18      2020/1/1        a           a                   c
2       b       18      2020/2/1        a           b                   c
3       c       18      2020/3/1        a           c                   c

2.2 lag() + lead()

with student_info as (select 1 sno, 'a' sname, 18 age, date '2020-01-01' create_date from dual union allselect 2 sno, 'b' sname, 18 age, date '2020-02-01' create_date from dual union allselect 3 sno, 'c' sname, 18 age, date '2020-03-01' create_date from dual
)
select si.sno,si.sname,si.age,si.create_date,lag(si.sname) over(partition by si.age order by si.create_date) 上一条记录,lead(si.sname) over(partition by si.age order by si.create_date) 下一条记录from student_info si;

查询结果:若没有,则为空

sno      sname   age     create_date     上一条记录   下一条记录
1       a       18      2020/1/1                    b
2       b       18      2020/2/1        a           c
3       c       18      2020/3/1        b

3 扩展

3.1 保持排序,且避免返回多行 keep()

/*要点:在子查询中 既能达到排序的目的,又不用担心 '返回多行'示例:查询各部门第一个入司的人
*/
select d.*,(select max(e.ename) keep(dense_rank first order by e.hiredate) -- 报错:子查询返回多行-- max(e.ename) over(partition by e.deptno order by e.hiredate)from scott.emp ewhere e.deptno = d.deptno) 第一个入司的人from scott.dept d;

Oracle 取第一个、最后一个和上一个、下一个函数详解(first_value、last_value 和 lag、lead)相关推荐

  1. oracle判断空值的函数nvl2,Oracle nvl、nvl2、nullif、decode、case函数详解

    1.NVL函数 nvl(expr1,expr2),如果expr1为空,则返回expr2: 2.NVL2函数 nvl2(expr1,expr2,expr3),如果expr1为空,则返回expr3,否则返 ...

  2. Oracle按日周月分组统计,及next_day()函数详解

    1.概述 工作中遇到如下问题:统计周期内关键词数,而这里的周期内最常用的就是日周月. 日月比较容易处理,周的话可以通过next_day()函数实现. 2.实例问题 如下,有一张表ljb_test,包括 ...

  3. python中排序英文单词怎么写_Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)...

    本文主要介绍排序最长的单词链的方法,列表中每个元素相当于一个单词,要实现列表中前一个单词末字母是下一个单词的首字母,并且这个链是最长的. 使用递归实现 words = ['giraffe', 'ele ...

  4. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现

    本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的时候,不小心用我的肉眼抓到了一个隐藏很深很深的内存泄露 Bug. 于是笔者将这个故事-哦不 -事 ...

  5. 在oracle中游标的操作,Oracle中的游标和函数详解

    Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构:可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理. 游标并不是一个数据库对象,只是存留在内存中. 操 ...

  6. chatgpt赋能python:Python取ln函数详解:用法及常见问题解答

    Python取ln函数详解:用法及常见问题解答 Python取ln函数是一种非常常用的数学函数,它可以帮助开发者在计算中处理数据的自然指数对数.本篇文章将会介绍Python中取ln函数的基础知识,让您 ...

  7. Oracle中nvl()与nvl2()函数详解

    Oracle中nvl()与nvl2()函数详解: 函数nvl(expression1,expression2)根据参数1是否为null返回参数1或参数2的值: 函数nvl2(expression1,e ...

  8. 历时一个月!50+Vue经典面试题详解,值得收藏!

    大家好,我是若川.持续组织了8个月源码共读活动,感兴趣的可以 点此加我微信ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  9. JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)...

    在接口测试和压力测试过程中,经常会将几个流程串联起来才能测试.如:我要进行获取用户信息接口测试,我就要先登录成功后,才能获取用户信息.所以,我就要首先要登录,获得我的登录凭证(tokenId或tick ...

最新文章

  1. linux 内存占用_分享Linux内存占用几个案例
  2. c++ const 类型检查
  3. PAT 1073 多选题常见计分法(20)(代码+思路)
  4. java文件流下载excel_React获取Java后台文件流下载Excel文件
  5. mysql行级锁unique_MySQL行级锁,表级锁,页级锁详解
  6. iis中间件_.NET Core技术研究中间件的由来和使用
  7. Vue 动态响应数据变化
  8. re学习笔记(0) CG-CTF-re-3 py交易
  9. The Open Group即将举办线上线下企业架构从业者峰会
  10. vscode登陆中国版leetcode
  11. 鸿蒙OS开源代码精要解读之——init
  12. 微信又确定全新封号标准!触犯这几条底线将被永久封号,望周知
  13. 起步HarmonyOS生态的入门学习路线及资源
  14. gateway官网解读(四)
  15. fastadmin 子账号看不到菜单,菜单没有查看,编辑等选项
  16. input输入数字金额
  17. LEETCODE | PYTHON | 724 | 寻找数组的中心下标
  18. Android使用沉浸式导航栏
  19. 防爆真空上料机工作原理是什么?
  20. 实现评论商品详情的评论功能

热门文章

  1. Winds下如何使用CMD命令进入MySQL数据库
  2. 【网络篇】第二篇——IP协议与MAC地址详解
  3. IO多路复用实现方式
  4. 使用 MATLAB 进行无线通信设计
  5. 第二十六篇:USB3.0高带宽ISO(48KBytes/125us)实战
  6. 让动画不再僵硬:Facebook Rebound Android动画库介绍
  7. 面试后只会傻等通知,分分钟钟“完蛋”!
  8. CSS3 - 使用弹性盒子(Flex Box)实现完美居中、栅格系统及响应式布局
  9. 日本人为何能拿这么多诺贝尔奖
  10. GStreamer appsrc 等插件实现视频音频混流,录制和推流