

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

# MAX
<a name="sql-reference-max"></a>

从窗口式查询返回一组值的最大值。根据时间或行定义窗口式查询。有关窗口查询的信息，请参阅[窗口式查询](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/windowed-sql.html)。

在使用 MAX 时，请注意以下事项：
+ 如果您未使用 `OVER` 子句，则 `MAX` 将作为聚合函数进行计算。在这种情况下，聚合查询必须根据将流分组到有限行中的 `ROWTIME` 在单调表达式中包含 [GROUP BY 子句](sql-reference-group-by-clause.md)。否则，组将是无限流，并且查询永远无法完成，也不会输出任何行。有关更多信息，请参阅 [聚合函数](sql-reference-aggregate-functions.md)。
+ 使用 GROUP BY 子句的窗口式查询在滚动窗口中处理行。有关更多信息，请参阅[滚动窗口（使用 GROUP BY 的聚合）](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/tumbling-window-concepts.html)。
+ 如果您使用 `OVER` 子句，则 `MAX` 将作为分析函数进行计算。有关更多信息，请参阅 [分析函数](sql-reference-analytic-functions.md)。
+ 使用 OVER 子句的窗口式查询在滑动窗口中处理行。有关更多信息，请参阅[滑动窗口](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/sliding-window-concepts.html) 

## 语法
<a name="w2aac22b7c42b9"></a>

### 滚动窗口式查询
<a name="w2aac22b7c42b9b2"></a>

```
MAX(number-expression) ... GROUP BY monotonic-expression | time-based-expression
```

### 滑动窗口式查询
<a name="w2aac22b7c42b9b4"></a>

```
MAX(number-expression) OVER window-specification
```

## 参数
<a name="w2aac22b7c42c11"></a>

*number-expression*

指定针对聚合中的每一行计算的值表达式。

OVER *window-specification*

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

按*单调*表达式分组 \$1 *time-based-expression*

基于分组表达式的值为记录分组，从而针对在所有列中具有相同值的每组行返回一个摘要行。

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

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

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

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

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

### 示例 1：使用 GROUP BY 子句返回最大值
<a name="w2aac22b7c42c13b5"></a>

在此示例中，聚合查询在 `ROWTIME` 上有一个 `GROUP BY` 子句，可将流分组到有限行中。随后，从 `MAX` 子句返回的行计算 `GROUP BY` 函数。

#### 使用 STEP（推荐）
<a name="sql-reference-max-step"></a>

```
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
    ticker_symbol VARCHAR(4), 
    max_price     DOUBLE);

CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
  INSERT INTO "DESTINATION_SQL_STREAM" 
    SELECT STREAM 
        ticker_symbol,
        MAX(Price) AS max_price
    FROM "SOURCE_SQL_STREAM_001"
    GROUP BY ticker_symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);
```

#### 使用 FLOOR
<a name="sql-reference-max-floor"></a>

```
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
    ticker_symbol VARCHAR(4), 
    max_price     DOUBLE);
-- CREATE OR REPLACE PUMP to insert into output
CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
  INSERT INTO "DESTINATION_SQL_STREAM" 
    SELECT STREAM 
        ticker_symbol,
        MAX(Price) AS max_price
    FROM "SOURCE_SQL_STREAM_001"
    GROUP BY ticker_symbol, FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE);
```

#### 结果
<a name="sql-reference-max-results"></a>

上一示例输出的流与以下内容类似。

![\[Table showing ROWTIME, TICKER_SYMBOL, and MAX_PRICE columns with sample data entries.\]](http://docs.amazonaws.cn/kinesisanalytics/latest/sqlref/images/sql-reference-max-example-1.png)


### 示例 2：使用 OVER 子句返回最大值
<a name="w2aac22b7c42c13b7"></a>

 在此示例中，`OVER` 子句划分流中按之前“1”小时的时间范围间隔分区的记录。随后，从 `MAX` 子句返回的行计算 `OVER` 函数。

```
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
    ticker_symbol VARCHAR(4),
    max_price     DOUBLE);
CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
    INSERT INTO "DESTINATION_SQL_STREAM"
    SELECT STREAM ticker_symbol, 
        MAX(price) OVER (
            PARTITION BY ticker_symbol
            RANGE INTERVAL '1' HOUR PRECEDING) AS max_price
    FROM "SOURCE_SQL_STREAM_001"
```

上一示例输出的流与以下内容类似。

![\[Table showing stock ticker symbols QAZ, QXZ, MJN, WSB with corresponding timestamps and maximum prices.\]](http://docs.amazonaws.cn/kinesisanalytics/latest/sqlref/images/sql-reference-max-example-2.png)


## 使用说明
<a name="w2aac22b7c42c15"></a>

对于字符串值，MAX 通过排序序列中的最后一个字符串来确定。

 如果将 MAX 用作分析函数，并且所计算的窗口不包含任何行，则 MAX 将返回 null。有关更多信息，请参阅 [分析函数](sql-reference-analytic-functions.md)。

## 相关主题
<a name="w2aac22b7c42c17"></a>
+ [窗口式查询](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/windowed-sql.html)
+ [聚合函数](sql-reference-aggregate-functions.md)
+ [GROUP BY 子句](sql-reference-group-by-clause.md)
+ [分析函数](sql-reference-analytic-functions.md)
+ [入门练习](https://docs.amazonaws.cn/kinesisanalytics/latest/dev/get-started-exercise.html)
+ [WINDOW 子句 (滑动窗口)](sql-reference-window-clause.md)