本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
MIN
返回窗口查询中一组值的最小值。窗口查询是根据时间或行数定义的。有关窗口式查询的信息,请参阅窗口式查询。
在使用 MIN 时,请注意以下事项:
如果你不使用
OVER子句,MIN以聚合函数的形式计算。在这种情况下,聚合查询必须包含GROUP BY 子句在基于以下条件的单调表达式上ROWTIME它将流分组为有限的行。否则,该组是无限流,查询将永远不会完成,也不会发出任何行。有关更多信息,请参阅 聚合函数。-
使用 GROUP BY 子句的窗口式查询处理滚动窗口中的行。有关更多信息,请参阅滚动窗口(使用 GROUP BY 的聚合)。
如果您将
OVER子句,MIN以分析函数的形式计算。有关更多信息,请参阅 分析函数。-
使用 OVER 子句的窗口式查询处理滑动窗口中的行。有关更多信息,请参阅滑动窗口
语法
滚动窗口式查询
MIN(number-expression) ... GROUP BY monotonic-expression | time-based-expression
滑动窗口式查询
MIN(number-expression) OVER window-specification
参数
number-expression
指定针对聚合中的每一行计算的值表达式。
OVER window-specification
将流中的记录除以时间范围间隔或行数分区。窗口规范定义流中记录的划分方式 (按时间范围间隔或行数)。
GROUP B单调表达式|time-based-expression
基于分组表达式的值为记录分组,从而针对在所有列中具有相同值的每组行返回一个摘要行。
示例
示例数据集
以下示例基于样本股票数据集,该数据集是开始使用在里面Amazon Kinesis Analytics. 要运行每个示例,您需要一个具有示例股票行情输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics App 和配置示例股票行情输入流,请参阅开始使用在里面Amazon Kinesis Analytics.
具有以下架构的示例股票数据集。
(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)
示例 1:使用 GROUP BY 子句,返回最小值
在此示例中,聚合查询有一个GROUP BY子句ROWTIME它将流分组为有限的行。随后,从 MIN 子句返回的行计算 GROUP BY 函数。
使用 STEP(推荐)
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), min_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, MIN(Price) AS min_price FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);
使用 FLOOR
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), min_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, MIN(Price) AS min_price FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE);
结果
上一示例输出的流与以下内容类似。
示例 2:使用 OVER 子句返回最小值
在此示例中,OVER子句将流中的记录除以前 '1' 小时的时间范围间隔。随后,从 MIN 子句返回的行计算 OVER 函数。
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), min_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, MIN(price) OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' HOUR PRECEDING) AS min_price FROM "SOURCE_SQL_STREAM_001"
上一示例输出的流与以下内容类似。
使用说明
对于字符串值,MIN 通过排序序列中的最后一个字符串来确定。
如果将 MIN 用作分析函数,并且正在计算的窗口不包含任何行,则 MIN 将返回 null。有关更多信息,请参阅 分析函数。