MySQL LEAD Function

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

MySQL LEAD()函数概述

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

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

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

LEAD(<expression>[,offset[, default_value]]) OVER (
    PARTITION BY (expr)
    ORDER BY (expr)
)
Code language: SQL (Structured Query Language) (sql)

表达

LEAD()函数从有序分区的offset-th行返回expression的值。

抵消

offset是从当前行向前获取值的行数。

offset必须是非负整数。如果offset为零,则LEAD()函数计算当前行的expression

如果省略offset ,则LEAD()函数默认使用 1。

默认值

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

如果您不指定default_value ,该函数将返回NULL

PARTITION BY 子句

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

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

ORDER BY 子句

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

MySQL LEAD()函数示例

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

Customers and Orders Tables

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

SELECT 
    customerName,
    orderDate,
    LEAD(orderDate,1) OVER (
        PARTITION BY customerNumber
        ORDER BY orderDate ) nextOrderDate
FROM 
    orders
INNER JOIN customers USING (customerNumber);
Code language: SQL (Structured Query Language) (sql)

这是输出:

MySQL LEAD Function Example

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

一旦后续行跨越分区边界,每个分区最后一行中的nextOrderDate的值为NULL

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

本教程有帮助吗?