Skip to main content

SQLite滞后

SQLite LAG()函数简介

SQLite LAG()函数是一个窗口函数,它允许您以给定的物理偏移量从分区中的当前行获取前一行的数据。

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

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

在这种语法中:

表示

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

抵消

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

违约

是在偏移量处的表达式为NULL时返回的默认值。如果跳过默认值,那么如果表达式的计算结果为NULL,LAG()函数将返回NULL。

按子句划分

PARTITION BY子句将结果集的行划分为LAG()函数适用的分区。如果没有显式指定PARTITION BY子句,LAG()函数将把整个结果集视为一个分区。

按条款排序

ORDER BY子句对LAG()函数应用到的每个分区的行进行排序。

LAG()函数通常用于计算给定偏移量下当前行和前一行的值之间的差值。

SQLite LAG()函数示例

我们将使用LEAD()函数教程中创建的CustomerVoices视图进行演示。

以下查询从CustomerVoices视图返回数据:

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

下图显示了部分输出:

SQLite LEAD function sample table

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

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

SELECT
CustomerId,
Year,
Total,
LAG ( Total, 1, 0 ) OVER (
ORDER BY Year
) PreviousYearTotal
FROM
CustomerInvoices
WHERE
CustomerId = 4;

以下是输出:

SQLite LAG Function ORDER BY clause example

在本例中:

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

下面的语句使用LAG()函数返回每个客户在随后年份的发票金额差异:

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

在本例中:

下图显示了部分输出:

SQLite LAG Function Over Partition Example

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

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