Oracle Lead(),Lag()

Lead()就是取当前顺序的下一条记录,相对Lag()就是取当前顺序的上一行记录

语法结构:

lead(value_expr [,offset][,default]) over([query_partition_clause] order by Order_by_clause)

参数说明:

value_expr 值表达式,通常是字段,也可是是表达式。value_expr本身不支持分析函数,也就是lead不支持多层调用。

offset 偏移,应该是很熟悉的数学概念了,或者是相对偏移,表格来开当前行的第offset行,如果offset是整数就表示是顺序下的前第n行,如果是负数就是往后第n行。 如果不提供这个参数,就是默认为1.

default 默认值,如果没有找到,应该返回什么值的意思,有点类似nvl(col,value)。如果没有设置,且找不到,那么就返回Null

over  理解成在一个结果集范围内,如果后面的partition by为空,那么就是当前的结果集范围内。

query_partition_clause  分区语句,对结果集合分区的语句,是可选的,如果没有就是所有的一个分区。

Order_by_clause 排序语句 必须需要 ,形如order by xxx desc/asc

exp:

select a.*,

lag(name,1) over (order by id desc) lag

from tmp a

时间: 2024-10-05 23:33:33

Oracle Lead(),Lag()的相关文章

SQL SERVER LEAD和LAG使用

示例:获取在48小时之内重复的记录 SELECT * FROM ( SELECT b.* , LAG(b.OperatorTime, 1, b.OperatorTime) OVER ( PARTITION BY b.No ORDER BY b.OperatorTime ) AS BeforTime , LEAD(b.OperatorTime, 1, b.OperatorTime) OVER ( PARTITION BY b.No ORDER BY b.OperatorTime ) AS Next

TSql Lead 和 Lag 函数

Lead 和 Lag 是TSql中的两个分析函数,执行顺序是在select语句之后,用于对查询的结果集进行前移和后移操作.如果窗口函数没有对查询的结果集分区,那么将整个结果集作为一个分区看待:如果窗口函数对查询的结果集分区,那么Lead和Lag就是对分区进行前移和后移操作. 窗口是由OVER 子句定义查询结果集内的窗口或用户指定的行集,其实就是在select的查询结果集中,将符合条件的多个数据行作为一个窗口,一个select的查询结果集可以划分为多个窗口,也可以仅有一个窗口:每一个窗口都独立于其

通过JMS监听Oracle AQ,在数据库变化时触发执行Java程序

环境说明 一Oracle高级消息队列AQ 创建消息负荷payload 创建队列表 创建队列并启动 队列的停止和删除 入队消息 出队消息 二Java使用JMS监听并处理Oracle AQ队列 创建连接参数类 创建消息转换类 主类进行消息处理 三监控表记录变化通知Java 创建表 创建存储过程 创建触发器 环境说明 本实验环境基于Oracle 12C和JDK1.8,其中Oracle 12C支持多租户特性,相较于之前的Oracle版本,使用'C##用户名表示用户',例如如果数据库用户叫kevin,则登

oracle索引,索引的建立、修改、删除

索引索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查.建立索引是一项技术性要求高的工作.一般在数据库设计阶段的与数据库结构一道考虑.应用系统的性能直接与索引的合理直接有关.下面给出建立索引的方法和要点.§3.5.1 建立索引1. CREATE INDEX命令语法: CREATE INDEXCREATE [unique] INDEX [user.]indexON [user.]table (column [ASC | DESC] [,column[ASC |

疯狂安装oracle 12c,此版本没有scott这个用户

今天要学习oracle,然后寻思下个吧,结果出现了很多问题,在此分享一下,搞疯了,太痛苦了,学的教程是用的 Oracle 11g,我去官网下载的Oracle 12g,文件很大,好不容易装好了,寻思就这么用吧,结果问题百出,总结下: 1.下载软件,请到官网下载,因为需要注册一个用户,所以请先拥有一个有效的邮箱 这里是如何注册为Oracle用户 http://jingyan.baidu.com/article/9c69d48f5c724413c9024ee6.html 2.安装Oracle 12g

Oracle异常处理,动态游标

小例子,方便以后查阅. 包头需要声明:   type C_CURSOR is ref cursor; procedure visitcount(in_date number, out_code out number, out_desc out varchar2 ) is t_date number(8); t_datepre number(8); t_sql varchar2(2000); t_tempcount number(8); c_data C_CURSOR; v_cityname va

java连接oracle数据库,关闭连接出现异常:java.sql.SQLRecoverableException: IO Error: Connection reset

java.sql.SQLRecoverableException: IO Error: Connection reset at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:612) at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:5094) at com.sms.send.StartTaskNew.run(SmsSend.java

强制删除正在连接的Oracle用户,以删除SDE用户为例

. 有时候想强制删除一个已经连接的Oracle用户,不能直接删除,可以用Kill会话信息. 比如今天想删除一个被连接的SDE用户,可以用以下方法删除一个“正在被连接”的用户. 1.查看所有用户的会话信息. select sid,serial#,username from v$session; 2.查看某一个指定用户的会话信息. 比如我们要删除其中的SDE用户,则可以用以下命令查看SDE用户的会话信息. select  sid,serial# from v$session where userna

Oracle存储过程,以逗号分隔字符串传参的处理

Oracle存储过程,经常会遇见传入的参数是逗号分隔. 处理需要3步: 第一步,创建Type类型 第二部,创建函数 第三部,创建存储过程 代码如下: 第一步: create or replace type varTableType as table of nvarchar2(40) 第二步: create or replace function str2numList123( p_string in varchar2 ) return varTableType as v_str long def