

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# LAG
<a name="sql-reference-lag"></a>

LAG 为记录返回表达式的计算结果（例如列名称），它是给定窗口中的当前记录之前的 N 条记录。根据当前记录计算偏移量和默认值。如果没有此类记录，LAG 将改为返回指定的默认表达式。LAG 返回与表达式的类型相同的值。

## 语法
<a name="sql-reference-lag-syntax"></a>

```
LAG(expr [ , N [ , defaultExpr]]) [ IGNORE NULLS | RESPECT NULLS ] OVER [ window-definition ] 
```

## 参数
<a name="sql-reference-lag-parameters"></a>

*expr*

根据记录计算的表达式。

*否*

要查询的当前记录之前的记录的数目。默认值为 `1`。

*defaultExpr*

在查询的记录（当前记录之前的 *n* 条）位于窗口外部的情况下返回的与 *expr* 类型相同的表达式。如果未指定，则为位于窗口外部的值返回 *null*。

**注意**  
*defaultExpr* 表达式不会替换从源流返回的实际 *null* 值。

IGNORE NULLS

一个指定在确定偏移量时不计入 null 值的子句。例如，假设查询 `LAG(expr, 1)`，并且上一条记录具有为 null 的 *expr* 值。随后，将查询之前的第二条记录，依此类推。

RESPECT NULLS

一个指定在确定偏移量时计入 null 值的子句。此行为是默认行为。

OVER *window-specification*

一个划分流中按时间范围间隔或记录数分区的记录的子句。窗口规范定义流中记录的划分方式 (按时间范围间隔或记录数)。

## 示例
<a name="sql-reference-lag-examples"></a>

### 示例数据集
<a name="w2aac22c31b7b9b2"></a>

以下示例基于示例股票数据集，后者是[《Amazon Kinesis Analytics 开发人员指南》](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html) 中的*入门练习*的一部分。要运行每个示例，您需要一个具有样本股票代码输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics 应用程序和配置示例股票代码输入流，请参阅[《Amazon Kinesis Analytics 开发人员指南》](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html) 中的*入门练习*。

具有以下架构的示例股票数据集。

```
(ticker_symbol  VARCHAR(4),
sector          VARCHAR(16),
change          REAL,
price           REAL)
```

### 示例 1：在 OVER 子句中返回前面的记录中的值
<a name="w2aac22c31b7b9b4"></a>

在此示例中，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.\]](http://docs.aws.amazon.com/zh_cn/kinesisanalytics/latest/sqlref/images/sql-reference-lag.png)


## 注意
<a name="sql-reference-lag-notes"></a>

LAG 不是 SQL:2008 标准的一部分。它是 Amazon Kinesis Data Analytics 流式 SQL 扩展。