lag与lead函数是跟偏移量相关的两个分析函数

通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤
该操作可代替表的自联接,且效率更高

lag()/lead()
  lead(field, num, defaultvalue)
    field: 需要查找的字段
    num: 往后查找的num行的数据
    defaultvalue: 没有符合条件的默认值

over()
  表示lag()与lead()操作的数据都在over()的范围内,里面可以使用以下子句
    partition by 语句(用于分组)
    order by 语句()用于排序)
  如:over(partition by a order by b) 表示以a字段进行分组,再以b字段进行排序,对数据进行查询

示例:

  数据集

with dataset as (select '001' as id, 'Jack' as name, '大连' as city, '100' as sales from dualunion allselect '002' as id, 'Tom' as name, '大连' as city, '98' as sales from dualunion allselect '003' as id, 'John' as name, '大连' as city, '125' as sales from dualunion allselect '004' as id, 'Larry' as name, '大连' as city, '130' as sales from dualunion allselect '005' as id, 'Levi' as name, '沈阳' as city, '115' as sales from dualunion allselect '006' as id, 'Tomas' as name, '沈阳' as city, '170' as sales from dualunion allselect '007' as id, 'Jimmy' as name, '沈阳' as city, '130' as sales from dualunion allselect '008' as id, 'Robert' as name, '大连' as city, '103' as sales from dualunion allselect '009' as id, 'William' as name, '大连' as city, '118' as sales from dualunion allselect '010' as id, 'Joe' as name, '沈阳' as city, '108' as sales from dual
)

获取当前记录的员工id,及销量仅次于该员工的员工id

select t.id ,lead(t.id, 1, null) over(order by t.sales desc)  next_record_id, t.name,t.city,t.sales
from ( select id,name,city,to_number(sales) as sales from dataset ) t  

结果:

获取当前记录的员工id,及销量仅高于该员工的员工id

select t.id ,lag(t.id, 1, null) over(order by t.sales desc)  next_record_id, t.name,t.city,t.sales
from ( select id,name,city,to_number(sales) as sales from dataset ) t   

结果:

获取当前记录的员工id,及按照城市分组且销量仅次于该员工的员工id

select t.id ,lead(t.id, 1, null) over(partition by t.city order by t.sales desc)  next_record_id, t.name,t.city,t.sales
from ( select id,name,city,to_number(sales) as sales from dataset ) t 

结果:

获取当前记录的员工id,及按照城市分组且销量仅次于该员工的员工id(销量差小于10的忽略)

select tt.*
from
(select t.id, t.name,t.sales,lead(t.sales,1, null) over(partition by t.city order by sales desc ) next_sales, (t.sales - lead(t.sales,1, null) over(partition by t.city order by sales desc )) as diff,t.city from ( select id,name,city,to_number(sales) as sales from dataset ) t
) tt
where tt.diff >= 10 or tt.diff is null

结果:

正在上传…重新上传取消

【无标题】lead与lag函数相关推荐

  1. SQL SERVER中LEAD和LAG函数

    SQL SERVER中LEAD和LAG函数 LEAD和LAG函数 LEAD 访问相同结果集的后续行中的数据,而不使用 SQL Server 2012 中的自联接. LEAD 以当前行之后的给定物理偏移 ...

  2. SQL SERVER LEAD和LAG函数

    sql server中LEAD和LAG函数可直接获取当前数据上下相邻多少行数据.见以下案例: --测试数据 if not object_id(N'Tempdb..#T') is null drop t ...

  3. Oracle 利用lead、lag函数查询已有记录的下一条、上一条记录

    (一)函数介绍(lead和lag函数类似) 语法结构: lead(value_expr [,offset][,default]) over([query_partition_clause] order ...

  4. sqlserver LEAD和LAG函数(学习记录)

    可用于sqlserver 2012以后的版本,主要是查询当前数据的前几条数据或后几条数据的值 例: LAG函数 往上取,取前几条的数据 WITH T AS ( SELECT 1 ID,10 NUM U ...

  5. 【无标题】朴实无华内存函数

    1.1memcpy 函数声明 void * memcpy ( void * destination , const void * source , size_t num ); 函数 memcpy 从 ...

  6. oracle lag group,oracle中lead和lag函数

    这两个函数,是偏移量函数,其用途是:可以查出同一字段下一个值或上一个值.lead(col_name,num,flag) col_name是列名:num是取向下第几个值:flag是一个标志,也就是如果向 ...

  7. 【无标题】matlab正态分布函数积分

    求助,我想求这三种积分的值,均值和方差给定,我这个表述代码哪里有错误,求各位大佬指点一下 clc; clear; syms x; J=(1./(sigma.*sqrt(2.*pi))).*exp((- ...

  8. SQL Server中的LAG函数与LEAD函数介绍

    点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 SQL Server从2012版本开始,引入了LEAD和LAG函数,这两个函数可以把之 ...

  9. oracle 按照lead,Oracle之Lead和Lag偏移量函数使用详解

    Oracle有两个函数:LEAD和LAG,这两个函数都是用来计算偏移量的分析函数,这两个函数的用法相同. Oracle官方文档解释是: LEADis an analytic function. It ...

最新文章

  1. js获取前后几天或者前后几个月的日期
  2. 简单分析一下socket中的bind
  3. Tensorflow基本开发步骤——以逻辑回归拟合二维数据为例
  4. php json encode html,php – json_encode不能使用html字符串作为值
  5. Kubernetes的初始化容器initContainers
  6. [导入]韩语基本会话
  7. CompletableFuture java 8新增加异步处理
  8. pytorch 指定卡1_收藏 | 13则PyTorch使用的小窍门
  9. 浅谈一下session问题
  10. java国际化软件_JavaWeb开发——软件国际化(动态元素国际化)
  11. Windows PC HYSPLIT Install
  12. 微信公众号粉丝、文章迁移流程及方法
  13. ACE_TAO 017 ACE_wrappers\examples\Reactor
  14. 2019百日打卡DAY12
  15. win7浏览器主页修改不过来_win7系统浏览器主页修改不了的解决方法
  16. 图文识别(一):验证码识别---中、英文、数字混合的单行文字识别等
  17. 迅雷百度网盘不能下载资源 办法总比困难多
  18. p2p打洞stun的原理
  19. 数据库的主要设计步骤
  20. Disruptor无锁ringbuff实现

热门文章

  1. 上帝的归上帝凯撒的归凯撒CODING权限管理更新
  2. 2022-2028中国隐私管理软件市场现状研究分析与发展前景预测报告
  3. TensorFlow.js实现商标识别
  4. 最近大热的NFT究竟是什么,我们应该参与吗?
  5. LME镍连续跌停,股指认购期权2日44倍,印尼神油再起波澜YP走势反复2022.3.17
  6. 我看“孙俪停止资助贫困学生张海清”事件
  7. 数据子系统之数据节点
  8. echarts双向条形图案例
  9. 【FLLPLL】FLL和PLL的概念FLL DCO VLO REFO (芯片是CC430F5137)
  10. bit bin mcs文件区别