MySQL LEAD 函数
简介:在本教程中,您将学习如何使用MySQL
LEAD()函数从同一结果集中的当前行访问后续行的数据。
MySQL LEAD() 函数概述
LEAD()函数是一个窗口函数,允许您向前看多行并从当前行访问行的数据。
与LAG()函数类似,LEAD()函数对于计算同一结果集中当前行和后续行之间的差异非常有用。
以下显示了LEAD()函数的语法:
LEAD(<expression>[,offset[, default_value]]) OVER (
PARTITION BY (expr)
ORDER BY (expr)
)
expression
LEAD()函数返回的值expression从offset-th有序分区排。
offset
offset是从当前行向前行的行数,以获取值。
offset必须是一个非负整数。如果offset为零,则LEAD()函数计算expression当前行的值。
如果省略 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()应用函数之前分区中行的顺序。
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);
这是输出:
+------------------------------------+------------+---------------+ | customerName | orderDate | nextOrderDate | +------------------------------------+------------+---------------+ | Atelier graphique | 2013-05-20 | 2014-09-27 | | Atelier graphique | 2014-09-27 | 2014-11-25 | | Atelier graphique | 2014-11-25 | NULL | | Signal Gift Stores | 2013-05-21 | 2014-08-06 | | Signal Gift Stores | 2014-08-06 | 2014-11-29 | | Signal Gift Stores | 2014-11-29 | NULL | | Australian Collectors, Co. | 2013-04-29 | 2013-05-21 | | Australian Collectors, Co. | 2013-05-21 | 2014-02-20 | | Australian Collectors, Co. | 2014-02-20 | 2014-11-24 | | Australian Collectors, Co. | 2014-11-24 | 2014-11-29 | | Australian Collectors, Co. | 2014-11-29 | NULL | | La Rochelle Gifts | 2014-07-23 | 2014-10-29 | | La Rochelle Gifts | 2014-10-29 | 2015-02-03 | | La Rochelle Gifts | 2015-02-03 | 2015-05-31 | | La Rochelle Gifts | 2015-05-31 | NULL | | Baane Mini Imports | 2013-01-29 | 2013-10-10 | | Baane Mini Imports | 2013-10-10 | 2014-10-15 | ...在此示例中,我们首先将客户编号的结果集划分为多个分区。然后,我们按订单日期对每个分区进行排序。最后,
LEAD()函数应用于每个分区以获取下一个订单日期。
一旦后续行穿过分区边界,nextOrderDate每个分区的最后一行中的值就是NULL。
在本教程中,您学习了如何使用MySQL LEAD()函数访问当前行中后续行的数据。 