lead()/lag()函数

2023-12-04 20:38
文章标签 函数 lag lead

本文主要是介绍lead()/lag()函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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()函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/454834

相关文章

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重