MySQL LEAD函数

时间:2019-11-20 08:52:27  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL LEAD()函数访问同一结果集中当前行中下一行的数据。

MySQL LEAD()函数概述

LEAD()函数是一个窗口函数,允许您向前查看许多行并从当前行访问该行的数据。

与LAG()函数类似,LEAD()函数对于计算同一结果集中当前行和后续行之间的差异非常有用。

下面显示了LEAD()函数的语法:

LEAD(<expression>[,offset[, default_value]]) OVER (
    PARTITION BY (expr)
    ORDER BY (expr)
)

表达

LEAD()函数从有序分区的第偏移量行返回expression的值。

抵消

偏移量是从当前行开始获取值的行数。

偏移量必须是非负整数。
如果offset为零,则LEAD()函数将计算当前行的表达式。

如果您省略了偏移量,则LEAD()函数默认使用一个。

默认值

如果没有后续行,则LEAD()函数将返回default_value。
例如,如果offset为1,则最后一行的返回值为default_value。

如果您未指定default_value,则该函数返回NULL。

PARTITION BY子句

PARTITION BY子句将结果集中的行划分为应用LEAD()函数的分区。

如果未指定PARTITION BY子句,则结果集中的所有行均被视为单个分区。

ORDER BY子句

ORDER BY子句确定在应用LEAD()函数之前分区中行的顺序。

MySQL LEAD()函数示例

我们将使用示例数据库中的orders和customers表进行演示:

以下语句查找每个客户的订购日期和下一个订购日期:

SELECT 
    customerName,
    orderDate,
    LEAD(orderDate,1) OVER (
        PARTITION BY customerNumber
        ORDER BY orderDate ) nextOrderDate
FROM 
    orders
INNER JOIN customers USING (customerNumber);

这是输出:

在此示例中,我们首先将结果集按客户编号划分为多个分区。
然后,我们按订购日期对每个分区进行了排序。
最后,将LEAD()函数应用于每个分区以获取下一个订购日期。

一旦下一行越过分区边界,则每个分区的最后一行中的nextOrderDate的值将为NULL。

在本教程中,您学习了如何使用MySQL LEAD()函数访问当前行中下一行的数据。