码迷,mamicode.com
首页 > 数据库 > 详细

【SQL查询】获取同一字段前/后n行的值_lag/lead

时间:2020-01-22 12:34:56      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:并且   open   查询   table   show   字段   opened   默认值   class   

lag/lead

1. 简介

lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。

2. 语法

 LAG(EXP_STR,OFFSET,DEFVAL) OVER()  
 LEAD(EXP_STR,OFFSET,DEFVAL) OVER() 

3. 说明

【EXP_STR】:待查询的参数列名
OFFSET】:取偏移后的第几行数据
DEFVAL】:没有符合条件时的默认值

4. 示例

  •   初始化数据:
技术图片
create table student (
no varchar(20) not null primary key,
name varchar(30),
class varchar(2));


insert into student values(06117050, 张三, 01);
insert into student values(06117051, 李四, 01);
insert into student values(06117052, 王五, 01);
insert into student values(06117053, 刘夕月, 01);
insert into student values(06117054, 朱龙, 01);
insert into student values(06117055, 小微, 01);
insert into student values(06117056, 小红, 01);
insert into student values(06117057, 张艳, 01);
insert into student values(06127001, 钱多多, 02);
insert into student values(06127002, 张杰, 02);
insert into student values(06127003, 王玲, 02);
insert into student values(06127004, 华少, 02);
commit;
View Code
  •   获取同一班级中,下一位同学的学号:
select s.no "学号",
       lead(s.no, 1) over(partition by s.class order by s.no) "下一个同学的学号",
       s.name "姓名",
       s.class "班级"
  from student s

结果

 技术图片

  •   获取同一班级中,上一位同学的学号:
--获取下一个学号
select s.no "学号",
       lag(s.no, 1) over(partition by s.class order by s.no) "上一个同学的学号",
       s.name "姓名",
       s.class "班级"
  from student s

  结果:

    技术图片

【SQL查询】获取同一字段前/后n行的值_lag/lead

标签:并且   open   查询   table   show   字段   opened   默认值   class   

原文地址:https://www.cnblogs.com/zhuhaiying/p/12228154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!