Oracle 取第一个、最后一个和上一个、下一个函数详解(first_value、last_value 和 lag、lead)
文章目录
- 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)相关推荐
- oracle判断空值的函数nvl2,Oracle nvl、nvl2、nullif、decode、case函数详解
1.NVL函数 nvl(expr1,expr2),如果expr1为空,则返回expr2: 2.NVL2函数 nvl2(expr1,expr2,expr3),如果expr1为空,则返回expr3,否则返 ...
- Oracle按日周月分组统计,及next_day()函数详解
1.概述 工作中遇到如下问题:统计周期内关键词数,而这里的周期内最常用的就是日周月. 日月比较容易处理,周的话可以通过next_day()函数实现. 2.实例问题 如下,有一张表ljb_test,包括 ...
- python中排序英文单词怎么写_Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)...
本文主要介绍排序最长的单词链的方法,列表中每个元素相当于一个单词,要实现列表中前一个单词末字母是下一个单词的首字母,并且这个链是最长的. 使用递归实现 words = ['giraffe', 'ele ...
- 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现
本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的时候,不小心用我的肉眼抓到了一个隐藏很深很深的内存泄露 Bug. 于是笔者将这个故事-哦不 -事 ...
- 在oracle中游标的操作,Oracle中的游标和函数详解
Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构:可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理. 游标并不是一个数据库对象,只是存留在内存中. 操 ...
- chatgpt赋能python:Python取ln函数详解:用法及常见问题解答
Python取ln函数详解:用法及常见问题解答 Python取ln函数是一种非常常用的数学函数,它可以帮助开发者在计算中处理数据的自然指数对数.本篇文章将会介绍Python中取ln函数的基础知识,让您 ...
- Oracle中nvl()与nvl2()函数详解
Oracle中nvl()与nvl2()函数详解: 函数nvl(expression1,expression2)根据参数1是否为null返回参数1或参数2的值: 函数nvl2(expression1,e ...
- 历时一个月!50+Vue经典面试题详解,值得收藏!
大家好,我是若川.持续组织了8个月源码共读活动,感兴趣的可以 点此加我微信ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...
- JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)...
在接口测试和压力测试过程中,经常会将几个流程串联起来才能测试.如:我要进行获取用户信息接口测试,我就要先登录成功后,才能获取用户信息.所以,我就要首先要登录,获得我的登录凭证(tokenId或tick ...
最新文章
- linux 内存占用_分享Linux内存占用几个案例
- c++ const 类型检查
- PAT 1073 多选题常见计分法(20)(代码+思路)
- java文件流下载excel_React获取Java后台文件流下载Excel文件
- mysql行级锁unique_MySQL行级锁,表级锁,页级锁详解
- iis中间件_.NET Core技术研究中间件的由来和使用
- Vue 动态响应数据变化
- re学习笔记(0) CG-CTF-re-3 py交易
- The Open Group即将举办线上线下企业架构从业者峰会
- vscode登陆中国版leetcode
- 鸿蒙OS开源代码精要解读之——init
- 微信又确定全新封号标准!触犯这几条底线将被永久封号,望周知
- 起步HarmonyOS生态的入门学习路线及资源
- gateway官网解读(四)
- fastadmin 子账号看不到菜单,菜单没有查看,编辑等选项
- input输入数字金额
- LEETCODE | PYTHON | 724 | 寻找数组的中心下标
- Android使用沉浸式导航栏
- 防爆真空上料机工作原理是什么?
- 实现评论商品详情的评论功能
热门文章
- Winds下如何使用CMD命令进入MySQL数据库
- 【网络篇】第二篇——IP协议与MAC地址详解
- IO多路复用实现方式
- 使用 MATLAB 进行无线通信设计
- 第二十六篇:USB3.0高带宽ISO(48KBytes/125us)实战
- 让动画不再僵硬:Facebook Rebound Android动画库介绍
- 面试后只会傻等通知,分分钟钟“完蛋”!
- CSS3 - 使用弹性盒子(Flex Box)实现完美居中、栅格系统及响应式布局
- 日本人为何能拿这么多诺贝尔奖
- GStreamer appsrc 等插件实现视频音频混流,录制和推流