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()
函数访问当前行中后续行的数据。