Skip to main content

SQLite LAST_VALUE()函数的实例

最后一个_VALUE()函数简介

LAST_VALUE()是一个窗口函数,可用于获取指定窗口帧中最后一行的值。

下面是最后一个函数的语法:

LAST_VALUE(expression) OVER (
PARTITION BY expression1, expression2,...
ORDER BY expression1 [ASC | DESC], expression2,..
frame_clause
)

让我们更详细地检查语法:

表示

是针对窗口框架中最后一行计算的任何有效表达式。表达式必须返回单个结果集。不允许在表达式中使用子查询或其他窗口函数。

分割

PARTITION BY子句根据最后一个_VALUE()函数适用的一个或多个条件将结果集划分为多个分区。partitionby子句是可选的。如果跳过它,最后一个_VALUE()函数将把整个结果集视为一个分区。

订购人

ORDER BY子句对应用最后一个函数的每个分区中的行进行排序。

框架条款

frame_子句定义当前分区的子集(或框架)。有关frame子句的更多详细信息,请查看窗口frame子句教程。

SQLite LAST_VALUE()函数示例

出于演示目的,我们将使用样本数据库中的以下轨迹表:

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

以下示例使用LAST_VALUE()函数返回曲目名称、曲目长度(以分钟为单位)以及专辑id 4的最长曲目:

SELECT
Name,
printf ( '%.f minutes',
Milliseconds / 1000 / 60 )
AS Length,
LAST_VALUE ( Name ) OVER (
ORDER BY Milliseconds
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS LongestTrack
FROM
tracks
WHERE
AlbumId = 4;

以下是输出:

SQLite LAST_VALUE with ORDER BY example

在本例中,ORDER BY子句根据唱片集id 4中的曲目长度对其进行排序,LAST_VALUE()函数从结果集中选择最长的曲目。

以下frame子句定义了从分区的第一行开始到最后一行结束的窗口框架:

RANGE BETWEEN UNBOUNDED PRECEDING AND 
UNBOUNDED FOLLOWING

请注意,我们使用printf()函数格式化了曲目的长度(以分钟为单位)。

2) 在分区示例上使用SQLite LAST_VALUE()

以下示例显示了所有专辑中的所有曲目。此外,它还显示了每张专辑的最短曲目:

SELECT
AlbumId,
Name,
printf ( '%.f minutes',
Milliseconds / 1000 / 60 )
AS Length,
LAST_VALUE ( Name ) OVER (
PARTITION BY AlbumId
ORDER BY Milliseconds DESC
RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) AS ShortestTrack
FROM
tracks;

下图显示了部分输出:

SQLite LAST_VALUE with PARTITION BY example

在本例中:

在本教程中,您学习了如何使用SQLite LAST_VALUE()函数获取指定窗口框架中最后一行的值。