zoukankan      html  css  js  c++  java
  • 【SQL查询】获取同一字段前/后n行的值_lag/lead

    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

      结果:

        

  • 相关阅读:
    Java Native Method
    SQL语句优化
    Ibatis的环境搭建以及遇到的问题解决
    Java 构建器
    SpringMVC自定义视图 Excel视图和PDF视图
    java 枚举的常见使用方法
    mysql 根据某些字段之和排序
    MFC The Screen Flickers When The Image Zoomed
    How To Debug Qmake Pro File
    Gcc And MakeFile Level1
  • 原文地址:https://www.cnblogs.com/zhuhaiying/p/12228154.html
Copyright © 2011-2022 走看看