Skip to main content

SQLite LEAD()函数的实例

SQLite LEAD()函数简介

SQLite LEAD()函数是一个窗口函数,它允许您在给定的物理偏移量下访问分区中当前行的数据。

以下是LEAD()函数的语法:

LEAD(expression [,offset[, default ]]) OVER (
PARTITION BY expression1, expression2,...
ORDER BY expression1 [ASC | DESC], expression2,...
)

在这种语法中:

表示

是一个基于指定偏移量对行的值求值的表达式。它必须返回一个值。

抵消

从当前行转发以获取值的行数。如果未明确指定偏移量,则偏移量的默认值为1。

违约

是偏移量处的表达式为空时返回的默认值。如果未指定默认值,则LEAD()函数将返回NULL。

按子句划分

PARTITION BY子句将结果集的行分布到LEAD()函数应用的分区中。如果没有显式指定PARTITION BY子句,函数会将整个结果集视为单个分区。

按条款排序

ORDER BY子句指定LEAD()函数应用于每个分区中的行的顺序。

我们经常使用LEAD()函数来计算当前行和后续行的值之间的差值。

SQLite LEAD()函数示例

我们基于示例数据库中的invoices表创建一个名为CustomerVoices的视图,用于演示:

CREATE VIEW CustomerInvoices
AS
SELECT
CustomerId,
strftime('%Y',InvoiceDate) Year,
SUM( total ) Total
FROM
invoices
GROUP BY CustomerId, strftime('%Y',InvoiceDate);

以下语句根据CustomerVoices视图查询数据:

SELECT
*
FROM
CustomerInvoices
ORDER BY
CustomerId,
Year,
Total;

下图显示了部分输出:

SQLite LEAD function sample table

1) 在结果集示例上使用SQLite LEAD()函数

以下查询使用LEAD()函数返回特定客户在随后年份的发票金额差异:

SELECT
CustomerId,
Year,
Total,
LEAD ( Total,1,0) OVER ( ORDER BY Year ) NextYearTotal
FROM
CustomerInvoices
WHERE
CustomerId = 1;

以下是输出:

SQLite LEAD function with ORDER BY example

在本例中:

2) 通过示例在分区上使用SQL LEAD()函数

以下示例使用LEAD()函数返回每个客户在随后几年的发票金额差异:

SELECT
CustomerId,
Year,
Total,
LEAD ( Total, 1, 0 ) OVER (
PARTITION BY CustomerId
ORDER BY Year
) NextYearTotal
FROM
CustomerInvoices;

下图显示了部分输出:

SQLite LEAD function with PARTITION BY example

在本例中:

请注意,每个分区的最后一行的值为零(0),因为它没有前导值。

在本教程中,您学习了如何使用SQLite LEAD()函数从分区中的当前行获取下一行的数据。