0
点赞
收藏
分享

微信扫一扫

MySQL窗口函数—前后函数-LAG和LEAD

用途:返回位于当前行的前n行(LAG(expr,n))或后n行(LEAD(expr,n))的expr的值

应用场景:查询前1名同学的成绩和当前同学成绩的差值

lag()

-- lag的用法
select 
 dname,
 ename,
 hiredate,
 salary,
 lag(salary,1,'无') over(partition by dname order by hiredate) as last_1_time,
 lag(salary,2) over(partition by dname order by hiredate) as last_2_time 
from employee;

lag有两个参数,也可以有三个参数,第一个参数就是需要显示的字段,第二个就是数字,也就是需要向前显示的值有多少行,第三个参数为默认值,如果前面一行没有的话,那么就会使用该值。当只有两个参数的时候(且第二个参数>1),则没有默认值。

/*
last_1_time: 指定了往上第1行的值,default为'2000-01-01'  
                         第一行,往上1行为null,因此取默认值 '2000-01-01'
                         第二行,往上1行值为第一行值,2021-11-01 
                         第三行,往上1行值为第二行值,2021-11-02 
last_2_time: 指定了往上第2行的值,为指定默认值
                         第一行,往上2行为null
                         第二行,往上2行为null
                         第四行,往上2行为第二行值,2021-11-01 
                         第七行,往上2行为第五行值,2021-11-02 
*/

lead()

-- lead的用法
select 
 dname,
 ename,
 hiredate,
 salary,
 lead(hiredate,1,'2000-01-01') over(partition by dname order by hiredate) as last_1_time,
 lead(hiredate,2) over(partition by dname order by hiredate) as last_2_time 
from employee;

这个方法,可以用于我们将前一天或者后一天放在同一行,然后进行运算得出我们需要的东西。

 每文一语

举报

相关推荐

0 条评论