本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
LAG
LAG 返回给定窗口中当前记录之前的 N 条记录的表达式(例如列名)的求值。偏移量和默认值都是相对于当前记录进行评估的。如果没有这样的记录,LAG 会改为返回指定的默认表达式。LAG 返回与表达式的类型相同的值。
语法
LAG(expr [ , N [ , defaultExpr]]) [ IGNORE NULLS | RESPECT NULLS ] OVER [ window-definition ]
参数
expr
根据记录计算的表达式。
否
要查询的当前记录之前的记录数。默认为 1
。
defaultExpr
与 e xpr 相同类型的表达式,如果查询的记录(在当前记录之前 n)落在窗口之外,则返回该表达式。如果未指定,则为位于窗口外部的值返回 null。
注意
defaultExpr 表达式不会替换从源流返回的实际 null 值。
IGNORE NULLS
一个子句,它指定在确定偏移量时不计算空值。例如,假设查询 LAG(expr, 1)
,并且上一条记录具有为 null 的 expr 值。随后,将查询之前的第二条记录,依此类推。
RESPECT NULLS
一个子句,它指定在确定偏移量时计算空值。此行为是默认行为。
OVER window-specification
一种将流中的记录除以时间范围间隔或记录数的子句。窗口规范定义流中记录的划分方式 (按时间范围间隔或记录数)。
示例
示例数据集
以下示例基于示例股票数据集,后者是《Amazon Kinesis Analytics 开发人员指南》 中的入门练习的一部分。要运行每个示例,您需要一个包含样本股票行情输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics 应用程序和配置示例股票代码输入流,请参阅《Amazon Kinesis Analytics 开发人员指南》 中的入门练习。
具有以下架构的示例股票数据集。
(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)
示例 1:在 OVER 子句中返回前面的记录中的值
在此示例中,OVER 子句将分区流中的记录除以前 '1' 分钟的时间范围间隔。随后,LAG 函数从包含给定股票代码的前 2 条记录中检索价格值,如果 price
为 null,则跳过记录。
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), price DOUBLE, previous_price DOUBLE, previous_price_2 DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, price, LAG(price, 1, 0) IGNORE NULLS OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' MINUTE PRECEDING), LAG(price, 2, 0) IGNORE NULLS OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' MINUTE PRECEDING) FROM "SOURCE_SQL_STREAM_001"
上一示例输出的流与以下内容类似。
![Table showing stock data with columns for time, ticker symbol, price, and previous prices.](images/sql-reference-lag.png)
注意
LAG 不是 SQL: 2008 标准的一部分。它是Amazon Kinesis Data Analytics 应用程序。