相关文章推荐
爱健身的打火机  ·  Direct2D API 概述 - ...·  1 月前    · 
体贴的葡萄  ·  Python3.x:selenium获取if ...·  3 月前    · 
小胡子的匕首  ·  FOREIGN KEY ...·  6 月前    · 

Lead() 和 lag()

lead( 列名 ,n,m): 当前记录后面第 n 行记录的 < 列名 > 的值,没有则默认值为 m ;如果不带参数 n,m ,则查找当前记录后面第一行的记录 < 列名 > 的值,没有则默认值为 null
lag(
列名 ,n,m): 当前记录前面第 n 行记录的 < 列名 > 的值,没有则默认值为 m ;如果不带参数 n,m ,则查找当前记录前面第一行的记录 < 列名 > 的值,没有则默认值为 null

--测试脚本

create table tmp_wrh_emp(enamevarchar2(100),job varchar2(100),sal number, deptno number,create_date date);

insert into tmp_wrh_emp(ename ,job ,sal , deptno ,create_date )

select 'ALLEN','dev',1000,10,sysdate from dual

union

select 'BOB','dev',2000,10,sysdate from dual

union

select 'CANDY','dev',3000,10,sysdate from dual

union

select 'DOIL','dev',4000,10,sysdate from dual

union

select 'EPSON','dev',5000,10,sysdate from dual;

select e.ename,

e.job,

e.sal,

e.deptno,

lead(e.sal, 1, 0) over(partition by e.deptno order by e.sal) lead_sal,

lag(e.sal, 1, 0) over(partition by e.deptno order by e.sal) lag_sal,

nvl(lead(e.sal) over(partition by e.deptno order by e.sal) - e.sal,

0) diff_lead_sal,

nvl(e.sal - lag(e.sal) over(partition by e.deptno order by e.sal), 0)diff_lag_sal

from tmp_wrh_emp e;

执行结果:

ENAME

JOB

SAL

DEPTNO

LEAD_SAL

LAG_SAL

DIFF_LEAD_SAL

DIFF_LAG_SAL

1

ALLEN

dev

1000

10

2000

0

1000

0

2

BOB

dev

2000

10

3000

1000

1000

1000

3

CANDY

dev

3000

10

4000

2000

1000

1000

4

DOIL

dev

4000

10

5000

3000

1000

1000

5

EPSON

dev

5000

10

0

4000

0

1000

Lead() 和 lag() lead(列名,n,m): 当前记录后面第n行记录的列名>的值,没有则默认值为m;如果不带参数n,m,则查找当前记录后面第一行的记录列名>的值,没有则默认值为null。 lag(列名,n,m): 当前记录前面第n行记录的列名>的值,没有则默认值为m;如果不带参数n,m,则查找当前记录前面第一行的记录列名>的值,没有则默认值为null。 --测试脚本 Hive的分析函数又叫 窗口函数 ,在 oracle 中就有这样的分析函数,主要用来做 数据 统计分析的。 Lag Lead 分析函数可以在同一次查询中 出同一字段的 N 数据 ( Lag )和后N 数据 ( Lead )作为独立的列。 这种操作可以代替表的自联接,并且 LAG LEAD 有更高的效率,其中over()表示 当前 查询的结果集对象,括号里面的语句则表示对这个结果集进 处理。 LAG (c...
lag lead 函数可以在同一次查询中 出同一字段的 N 数据 lag )和后N 数据 lead )。这种字段可以使用对相同表的表连接来实现,不过使用 lag lead 函数具有更高的效率。 SELECT * FROM (select pid, sp.Psnname, sp.Upbid, sp.Updid, sp.startdate, sp.enddate, lag (enddate, 1, null) o...
SELECT @num:=@num+1 AS rownum, holiday.* FROM holiday,(SELECT @num:=0) as r ORDER BY cr_date )t1,( -- 查询 当前 记录 对应序号 select curNum from( SELECT @num2:=@num2+1 AS curNum, holiday.* FROM holiday ,(SELECT @num2
select DISTINCT newmeasure.outpatient_no,newmeasure.name,pre.current_gestational_week, pem.systolic,pem.diastolic,pem.systolic_2,pem.diastolic_2,pem.systolic_3,pem.diastolic_3, pem.temperature,pem.pulse,pem.height,pem.weight,ppr.preweight,ppr.bmi,
SQL 中的 LAG LEAD 函数用于获 结果集中某 一行 面或后面的 LAG 函数返回结果集中指定列上 当前 的某 一行 。通过向 LAG 函数提供偏移量来指定要返回的 一行 数。 LEAD 函数返回结果集中指定列上 当前 之后的某 一行 。通过向 LEAD 函数提供偏移量来指定要返回的后 一行 数。 这些函数一般用于分析 数据 的趋势和变化,例如计算时间序列 数据 中的变化率等。 下面是一个使用 LAG LEAD 函数的例子: SELECT employee_id, salary, LAG (salary) OVER (ORDER BY hire_date) AS prev_salary, LEAD (salary) OVER (ORDER BY hire_date) AS next_salary employees 这个例子中,我们使用 LAG 函数获 了每个员工 一个雇佣日期的薪资,使用 LEAD 函数获 了每个员工后一个雇佣日期的薪资。
oracle 拆分类型为多行(regexp_substr) 与 多个行汇总合并(listagg(codecname,‘,‘)within group(order by endortype))到一个字段 2021-10-19