MYSQL lag() 和lead()函数使用介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL lag() 和lead()函数使用介绍相关的知识,希望对你有一定的参考价值。

参考技术A LAG()函数是一个窗口函数,允许您从当前行向前看多行数据。与LEAD()函数类似,LEAD()函数对于计算同一结果集中当前行和后续行之间的差异非常有用。

LAG语法: LAG(列名,[offset], [default_value]) OVER ( PARTITION BY 列名,... ORDER BY 列名 [ASC|DESC],... )

LEAD语法: LEAD(列名,[offset], [default_value]) OVER ( PARTITION BY 列名,... ORDER BY 列名 [ASC|DESC],... )

offset:offset是从当前行偏移的行数,以获取值。offset必须是一个非负整数。如果offset为零,则LEAD()函数计算当前行的值。如果省略 offset,则LEAD()函数默认使用一个。
default_value:如果没有后续行,则LEAD()函数返回default_value。例如,如果offset是1,则最后一行的返回值为default_value。如果您未指定default_value,则函数返回 NULL 。
PARTITION BY子句:PARTITION BY子句将结果集中的行划分LEAD()为应用函数的分区。如果PARTITION BY未指定子句,则结果集中的所有行都将被视为单个分区。
ORDER BY子句:ORDER BY子句确定LEAD()应用函数之前分区中行的顺序。

用途举例:

ps:
不适合计算留存,举例说明:
求3日留存用户,以下为用户登录表login_history_table:

首先使用LEAD函数对用户登录时间做偏移,SQL如下:

结果如下:

根据上面查询到的结果,3日留存用户中不能统计到abc,而实际应该包含abc,因为该用户20211022登录后,在3天后的20211025日又重新登录了。

ORACLE 偏移分析函数 lag()与lead() 用法

一、简介

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

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

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

二、示例

表初始化数据为:

  a、获取当前记录的id,以及下一条记录的id  

select t.id id ,

lead(t.id, 1, null) over (order by t.id) next_record_id, t.cphm

from tb_test t

order by t.id asc

  b、获取当前记录的id,以及上一条记录的id

select t.id id ,

lag(t.id, 1, null) over (order by t.id) next_record_id, t.cphm

from tb_test t

order by t.id asc

  c、获取号牌号码相同的,当前记录的id与,下一条记录的id(使用partition by)

select t.id id,

lead(t.id, 1, null) over(partition by cphm order by t.id) next_same_cphm_id, t.cphm

from tb_test t

order by t.id asc

以上是关于MYSQL lag() 和lead()函数使用介绍的主要内容,如果未能解决你的问题,请参考以下文章

如何为不同的观察组使用 LAG 和 LEAD 窗口函数

在sqlserver 2008 怎么配置才可以正常支持lead和lag分析函数

ORACLE 偏移分析函数 lag()与lead() 用法

ORACLE 偏移分析函数 lag()与lead() 用法

LAG 和 LEAD 函数

Hive分析函数LAG和LEAD详解