InfluxQL 选择器函数
使用选择器函数评估、选择和返回数据中的值。选择器函数为每个 InfluxQL 组返回一行或多行,其中包含选定的值。
示例使用InfluxDB 入门教程中提供的示例数据集。
缺少 InfluxQL 函数
某些 InfluxQL 函数正在重新架构中,以与 InfluxDB 3 存储引擎一起工作。如果您需要的函数不在此处,请查看InfluxQL 功能支持页面以获取更多信息。
BOTTOM()
返回最小的 N
个字段值。 BOTTOM()
支持 int64 和 float64 字段值数据类型。
BOTTOM(field_expression[, tag_expression_1[, ..., tag_expression_n]], N)
注意: 如果最小值存在两个或多个值之间的关联,则 BOTTOM()
返回时间戳最早的字段值。
参数
- field_expression:用于标识要操作的字段的表达式。可以是字段键或常量。
- tag_expression:用于标识要按其分段的标签键的表达式。可以是标签键或常量。逗号分隔多个标签。
- N:从每个 InfluxQL 组或指定的标签段返回的结果数。
显著行为
示例
选择字段的底部三个值
SELECT BOTTOM(temp, 3) FROM home
时间 | 底部 |
---|
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
时间 | 底部 | 房间 |
---|
2022-01-01T08:00:00Z | 21 | 厨房 |
2022-01-01T08:00:00Z | 21.1 | 客厅 |
选择底部三个字段值以及与每个值关联的标签值
SELECT BOTTOM(temp, 3), room FROM home
时间 | 底部 | 房间 |
---|
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
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T12:00:00Z'
GROUP BY time(2h)
时间 | 底部 | 房间 |
---|
2022-01-01T08:00:00Z | 21 | 厨房 |
2022-01-01T08:00:00Z | 21.1 | 客厅 |
2022-01-01T10:00:00Z | 21.8 | 客厅 |
2022-01-01T11:00:00Z | 22.4 | 厨房 |
2022-01-01T12:00:00Z | 22.2 | 客厅 |
2022-01-01T12:00:00Z | 22.5 | 厨房 |
请注意,当按时间分组时,BOTTOM()
保持点的原始时间戳。
FIRST()
返回具有最旧时间戳的字段值。
参数
- field_expression:用于标识要操作的一个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符 (
*
)。支持所有字段数据类型。
显著行为
示例
选择字段的第一个值
SELECT FIRST(temp) FROM home
时间 | 第一个 |
---|
2022-01-01T08:00:00Z | 21.1 |
从每个字段中选择第一个值
SELECT FIRST(*) FROM home
时间 | first_co | first_hum | first_temp |
---|
1970-01-01T00:00:00Z | 0 | 35.9 | 21.1 |
从与正则表达式匹配的字段键中选择第一个值
SELECT FIRST(/^[th]/) FROM home
时间 | 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)
时间 | 第一个 |
---|
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
时间 | 最后一个 |
---|
2022-01-01T20:00:00Z | 22.7 |
从每个字段中选择最后一个值
时间 | last_co | last_hum | last_temp |
---|
1970-01-01T00:00:00Z | 26 | 36.5 | 22.7 |
从与正则表达式匹配的字段键中选择最后一个值
SELECT LAST(/^[th]/) FROM home
时间 | 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)
时间 | 最后一个 |
---|
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:用于标识要操作的一个或多个字段的表达式。可以是字段键、常量、正则表达式或通配符 (
*
)。支持数值字段。
显著行为
示例
从字段中选择最大值
时间 | 最大值 |
---|
2022-01-01T20:00:00Z | 26 |
从每个字段中选择最大值
时间 | max_co | max_hum | max_temp |
---|
1970-01-01T00:00:00Z | 26 | 36.9 | 23.3 |
从与正则表达式匹配的字段键中选择最大值
SELECT MAX(/^[th]/) FROM home
时间 | 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)
时间 | 最大值 |
---|
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
时间 | 最小值 |
---|
2022-01-01T08:00:00Z | 21 |
从每个字段中选择最小值
时间 | min_co | min_hum | min_temp |
---|
1970-01-01T00:00:00Z | 0 | 35.9 | 21 |
从与正则表达式匹配的字段键中选择最小值
SELECT MIN(/^[th]/) FROM home
时间 | 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)
时间 | 最小值 |
---|
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
时间 | 百分位数 |
---|
2022-01-01T11:00:00Z | 22.4 |
从每个字段中选择第 50 个百分位数的值
SELECT PERCENTILE(*, 50) FROM home
时间 | percentile_co | percentile_hum | percentile_temp |
---|
1970-01-01T00:00:00Z | 1 | 36 | 22.4 |
从与正则表达式匹配的字段键中选择第 50 个百分位数的值
SELECT PERCENTILE(/^[th]/, 50) FROM home
时间 | 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)
时间 | 百分位数 |
---|
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
时间 | 顶部 |
---|
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
时间 | 顶部 | 房间 |
---|
2022-01-01T18:00:00Z | 23.3 | 厨房 |
2022-01-01T18:00:00Z | 22.8 | 客厅 |
选择顶部三个字段值以及与每个值关联的标签值
SELECT TOP(temp, 3), room FROM home
时间 | 顶部 | 房间 |
---|
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
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T12:00:00Z'
GROUP BY time(2h)
时间 | 顶部 | 房间 |
---|
2022-01-01T09:00:00Z | 23 | 厨房 |
2022-01-01T09:00:00Z | 21.4 | 客厅 |
2022-01-01T10:00:00Z | 22.7 | 厨房 |
2022-01-01T11:00:00Z | 22.2 | 客厅 |
2022-01-01T12:00:00Z | 22.5 | 厨房 |
2022-01-01T12:00:00Z | 22.2 | 客厅 |
请注意,当按时间分组时,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'
时间 | 底部 |
---|
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
时间 | 顶部 | 房间 |
---|
2022-01-01T18:00:00Z | 23.3 | 厨房 |
2022-01-01T18:00:00Z | 22.8 | 客厅 |
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB Clustered 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。