InfluxQL 选择器函数
使用选择器函数来评估、选择并返回数据中的值。选择器函数返回来自每个 InfluxQL 分组的所选值的一行或多行。
示例使用在InfluxDB 入门教程中提供的示例数据集。
缺失的 InfluxQL 函数
一些 InfluxQL 函数正在重构以与 InfluxDB 3.0 存储引擎一起工作。如果您需要的函数不在列表中,请查阅InfluxQL 特性支持页面以获取更多信息。
BOTTOM()
返回最小的 N
字段值。BOTTOM()
支持整型 64 位和浮点型 64 位的字段值 数据类型。
BOTTOM(field_expression[, tag_expression_1[, ..., tag_expression_n]], N)
注意: BOTTOM()
如果两个或多个值的最小值相同,则返回最早时间戳的字段值。
参数
- field_expression: 操作的字段标识表达式。可以是 字段键 或常量。
- tag_expression: 识别用于分割的标签键的表达式。可以是 标签键 或常量。逗号分隔多个标签。
- N: 从每个 InfluxQL 分组或指定的标签段返回的结果数量。
显著行为
示例
选择字段的最低三个值
SELECT BOTTOM(temp, 3) FROM home
time | bottom |
---|
2022-01-01T08:00:00Z | 21 |
2022-01-01T08:00:00Z | 21.1 |
2022-01-01T09:00:00Z | 21.4 |
选择两个唯一标签值的最低字段值
SELECT BOTTOM(temp, room, 2) FROM home
time | bottom | room |
---|
2022-01-01T08:00:00Z | 21 | Kitchen |
2022-01-01T08:00:00Z | 21.1 | Living Room |
选择三个最低字段值及其相关标签值
SELECT BOTTOM(temp, 3), room FROM home
time | bottom | room |
---|
2022-01-01T08:00:00Z | 21 | Kitchen |
2022-01-01T08:00:00Z | 21.1 | Living Room |
2022-01-01T09:00:00Z | 21.4 | Living Room |
选择底部字段值以获取唯一的标签值,并在时间窗口内(按时间分组)
SELECT
BOTTOM(temp, room, 2)
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T12:00:00Z'
GROUP BY time(2h)
time | bottom | room |
---|
2022-01-01T08:00:00Z | 21 | Kitchen |
2022-01-01T08:00:00Z | 21.1 | Living Room |
2022-01-01T10:00:00Z | 21.8 | Living Room |
2022-01-01T11:00:00Z | 22.4 | Kitchen |
2022-01-01T12:00:00Z | 22.2 | Living Room |
2022-01-01T12:00:00Z | 22.5 | Kitchen |
注意:当按时间分组时,BOTTOM()
保留了点的原始时间戳。
FIRST()
返回具有最旧时间戳的字段值。
参数
- field_expression:用于标识要操作的某个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符(
*
)。支持所有字段数据类型。
显著行为
示例
选择字段的第一个值
SELECT FIRST(temp) FROM home
time | first |
---|
2022-01-01T08:00:00Z | 21.1 |
选择每个字段的第一个值
SELECT FIRST(*) FROM home
time | first_co | first_hum | first_temp |
---|
1970-01-01T00:00:00Z | 0 | 35.9 | 21.1 |
选择匹配正则表达式的字段键的第一个值
SELECT FIRST(/^[th]/) FROM home
time | first_hum | first_temp |
---|
1970-01-01T00:00:00Z | 35.9 | 21.1 |
选择时间窗口内(按时间分组)字段的第一个值
SELECT
FIRST(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | first |
---|
2022-01-01T06:00:00Z | 21 |
2022-01-01T12:00:00Z | 22.5 |
2022-01-01T18:00:00Z | 23.3 |
注意:当按时间分组时,FIRST()
覆盖点的原始时间戳。
LAST()
返回具有最新时间戳的字段值。
参数
- field_expression:用于标识要操作的某个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符(
*
)。支持所有字段数据类型。
显著行为
示例
选择字段的最后一个值
SELECT LAST(temp) FROM home
time | last |
---|
2022-01-01T20:00:00Z | 22.7 |
选择每个字段的最后一个值
time | last_co | last_hum | last_temp |
---|
1970-01-01T00:00:00Z | 26 | 36.5 | 22.7 |
选择匹配正则表达式的字段键的最后一个值
SELECT LAST(/^[th]/) FROM home
time | last_hum | last_temp |
---|
1970-01-01T00:00:00Z | 36.5 | 22.7 |
选择时间窗口内(按时间分组)字段的最后一个值
SELECT
LAST(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | last |
---|
2022-01-01T06:00:00Z | 22.4 |
2022-01-01T12:00:00Z | 22.7 |
2022-01-01T18:00:00Z | 22.7 |
注意:当按时间分组时,LAST()
覆盖点的原始时间戳。
MAX()
返回最大的字段值。
参数
- field_expression:用于标识要操作的某个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符(
*
)。支持数值字段。
显著行为
示例
从字段中选择最大值
time | max |
---|
2022-01-01T20:00:00Z | 26 |
从每个字段中选择最大值
time | max_co | max_hum | max_temp |
---|
1970-01-01T00:00:00Z | 26 | 36.9 | 23.3 |
从匹配正则表达式的字段键中选择最大值
SELECT MAX(/^[th]/) FROM home
time | max_hum | max_temp |
---|
1970-01-01T00:00:00Z | 36.9 | 23.3 |
从时间窗口内(按时间分组)的字段中选择最大值
SELECT
MAX(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | max |
---|
2022-01-01T06:00:00Z | 23 |
2022-01-01T12:00:00Z | 22.8 |
2022-01-01T18:00:00Z | 23.3 |
注意:当按时间分组时,MAX()
覆盖点的原始时间戳。
MIN()
返回最低的字段值。
参数
- field_expression:用于标识要操作的某个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符(
*
)。支持数值字段。
显著行为
示例
从字段中选择最小值
SELECT MIN(temp) FROM home
time | min |
---|
2022-01-01T08:00:00Z | 21 |
从每个字段中选择最小值
time | min_co | min_hum | min_temp |
---|
1970-01-01T00:00:00Z | 0 | 35.9 | 21 |
从匹配正则表达式的字段键中选择最小值
SELECT MIN(/^[th]/) FROM home
time | min_hum | min_temp |
---|
1970-01-01T00:00:00Z | 35.9 | 21 |
从时间窗口内的字段中选择最小值(按时间分组)
SELECT
MIN(temp)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | min |
---|
2022-01-01T06:00:00Z | 21 |
2022-01-01T12:00:00Z | 22.4 |
2022-01-01T18:00:00Z | 22.7 |
注意:当按时间分组时,MIN()
会覆盖点的原始时间戳。
PERCENTILE()
返回第 N
个百分位的 字段值。
PERCENTILE(field_expression, N)
参数
- field_expression:用于标识要操作的某个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符(
*
)。支持数值字段。 - N:要返回的百分位。必须是大于0且小于或等于100的整数或浮点数。
显著行为
示例
从字段中选择第50个百分位值
SELECT PERCENTILE(temp, 50) FROM home
time | percentile |
---|
2022-01-01T11:00:00Z | 22.4 |
从每个字段中选择第50个百分位值
SELECT PERCENTILE(*, 50) FROM home
time | percentile_co | percentile_hum | percentile_temp |
---|
1970-01-01T00:00:00Z | 1 | 36 | 22.4 |
从匹配正则表达式的字段键中选择第50个百分位值
SELECT PERCENTILE(/^[th]/, 50) FROM home
time | percentile_hum | percentile_temp |
---|
1970-01-01T00:00:00Z | 36 | 22.4 |
从时间窗口内的字段中选择第50个百分位值(按时间分组)
SELECT
PERCENTILE(temp, 50)
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T20:00:00Z'
GROUP BY time(6h)
time | percentile |
---|
2022-01-01T06:00:00Z | 22.4 |
2022-01-01T12:00:00Z | 22.7 |
2022-01-01T18:00:00Z | 23.1 |
注意:当按时间分组时,PERCENTILE()
会覆盖点的原始时间戳。
TOP()
返回最大的 N
个 字段值。 TOP()
支持 字段值数据类型 int64 和 float64。
TOP(field_expression[, tag_expression_1[, ..., tag_expression_n]], N)
注意: 如果两个或多个值对最大值有争议,TOP()
返回具有最早时间戳的字段值。
参数
- field_expression: 操作的字段标识表达式。可以是 字段键 或常量。
- tag_expression: 识别用于分割的标签键的表达式。可以是 标签键 或常量。逗号分隔多个标签。
- N: 从每个 InfluxQL 分组或指定的标签段返回的结果数量。
显著行为
示例
选择字段的最高三个值
SELECT TOP(temp, 3) FROM home
time | top |
---|
2022-01-01T09:00:00Z | 23 |
2022-01-01T18:00:00Z | 23.3 |
2022-01-01T19:00:00Z | 23.1 |
选择两个唯一标签值的最高字段值
SELECT TOP(temp, room, 2) FROM home
time | top | room |
---|
2022-01-01T18:00:00Z | 23.3 | Kitchen |
2022-01-01T18:00:00Z | 22.8 | Living Room |
选择前三个字段值及其关联的标签值
SELECT TOP(temp, 3), room FROM home
time | top | room |
---|
2022-01-01T09:00:00Z | 23 | Kitchen |
2022-01-01T18:00:00Z | 23.3 | Kitchen |
2022-01-01T19:00:00Z | 23.1 | Kitchen |
选择唯一标签值的最高字段值和(按时间分组)时间窗口内的字段值
SELECT
TOP(temp, room, 2)
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T12:00:00Z'
GROUP BY time(2h)
time | top | room |
---|
2022-01-01T09:00:00Z | 23 | Kitchen |
2022-01-01T09:00:00Z | 21.4 | Living Room |
2022-01-01T10:00:00Z | 22.7 | Kitchen |
2022-01-01T11:00:00Z | 22.2 | Living Room |
2022-01-01T12:00:00Z | 22.5 | Kitchen |
2022-01-01T12:00:00Z | 22.2 | Living Room |
注意:当按时间分组时,TOP()
保持点的原始时间戳。
选择器函数的显著行为
按时间分组的时间戳
当使用带有 GROUP BY time()
子句的选择函数时,大多数选择函数返回每个时间间隔的开始边界的时间戳。然而,具有指定每个组返回结果数目的 N
参数的函数保持每个返回点的原始时间戳。
选择函数可能返回的点数少于预期
使用以下选择函数并带有 N
参数的查询可能返回的点数少于预期。
如果 InfluxQL 分组或指定的标签键包含 X
个点或唯一标签值,并且 X
小于 N
,则函数返回每个组或标签值的 X
个结果而不是 N
。
查看 FN(field_key, N)
的示例
以下示例从 2022-01-01T08:00:00Z 到 2022-01-01T10:00:00Z 期间的厨房中选择了底部 5 个温度。在查询时间段内,厨房只有 3 个记录点,因此查询返回了 3 个点而不是 5 个。
SELECT BOTTOM(temp, 5)
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T10:00:00Z'
AND room = 'Kitchen'
time | bottom |
---|
2022-01-01T08:00:00Z | 21 |
2022-01-01T09:00:00Z | 23 |
2022-01-01T10:00:00Z | 22.7 |
查看 FN(field_key, tag_key, N)
的示例
以下示例从 room
标签的 3 个唯一值中选择最高温度。然而,room
标签只有 2 个唯一值,因此结果只包含 2 个值。
SELECT TOP(temp, room, 3) FROM home
time | top | room |
---|
2022-01-01T18:00:00Z | 23.3 | Kitchen |
2022-01-01T18:00:00Z | 22.8 | Living Room |
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 和此文档的反馈和错误报告。要找到支持,请使用以下资源
拥有年度或支持合同的客户 可以 联系 InfluxData 支持。