摘要:在本教程中,您将学习如何使用 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()
函数示例
我们将使用示例数据库中的orders
和customers
表进行演示:
以下语句查找每个客户的订单日期和下一个订单日期:
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)
这是输出:
在此示例中,我们首先将结果集按客户编号划分为多个分区。然后,我们按订单日期对每个分区进行排序。最后,将LEAD()
函数应用于每个分区以获得下一个订单日期。
一旦后续行跨越分区边界,每个分区最后一行中的nextOrderDate
的值为NULL
。
在本教程中,您学习了如何使用 MySQL LEAD()
函数从当前行访问后续行的数据。