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

举报
王小王-123 发表于 2022/03/23 22:59:45 2022/03/23
【摘要】 用途:返回位于当前行的前n行(LAG(expr,n))或后n行(LEAD(expr,n))的expr的值 应用场景:查询前1名同学的成绩和当前同学成绩的差值 lag() -- lag的用法select dname, ename, hiredate, salary, lag(salary,1,'无') over(partition...

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

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

lag()


  
  1. -- lag的用法
  2. select
  3. dname,
  4. ename,
  5. hiredate,
  6. salary,
  7. lag(salary,1,'无') over(partition by dname order by hiredate) as last_1_time,
  8. lag(salary,2) over(partition by dname order by hiredate) as last_2_time
  9. from employee;

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


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

lead()


  
  1. -- lead的用法
  2. select
  3. dname,
  4. ename,
  5. hiredate,
  6. salary,
  7. lead(hiredate,1,'2000-01-01') over(partition by dname order by hiredate) as last_1_time,
  8. lead(hiredate,2) over(partition by dname order by hiredate) as last_2_time
  9. from employee;

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

 每文一语

冲鸭!

文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:wxw-123.blog.csdn.net/article/details/123553403

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。