文档文档

InfluxQL 选择器函数

使用选择器函数来评估、选择和返回数据中的值。选择器函数为每个 InfluxQL 组返回一行或多行,其中包含选定的值。

以下每个选择器函数都涵盖了语法,包括传递给函数的参数,以及如何使用该函数的示例。示例使用NOAA 水样本数据

BOTTOM()

返回最小的 N字段值BOTTOM() 支持 int64 和 float64 字段值数据类型

注意: 如果最小值的两个或多个值之间存在并列,则 BOTTOM() 返回时间戳最早的字段值。

语法

SELECT BOTTOM(<field_key>[,<tag_key(s)>],<N> )[,<tag_key(s)>|<field_key(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

BOTTOM(field_key,N)
返回与字段键关联的最小 N 个字段值。

BOTTOM(field_key,tag_key,N)
返回标签键的 N 个标签值的最小字段值。在多个标签键之间添加逗号:tag_key,tag_key

BOTTOM((field_key,N),tag_key,field_key)
返回与括号中的字段键以及相关的标签和/或字段关联的最小 N 个字段值。在多个标签或字段键之间添加逗号:tag_key,tag_key,field_key,field_key

示例

选择与字段键关联的最小三个字段值

选择与字段键关联的两个标签的最小字段值

选择与字段键以及相关标签和字段关联的最小四个字段值

选择与字段键关联的最小三个字段值,并包含多个子句

BOTTOM() 的常见问题

带有 GROUP BY time() 子句的 BOTTOM()

带有 BOTTOM()GROUP BY time() 子句的查询为每个 GROUP BY time() 间隔返回指定数量的数据点。对于大多数 GROUP BY time() 查询,返回的时间戳标记 GROUP BY time() 间隔的开始。带有 BOTTOM() 函数的 GROUP BY time() 查询的行为有所不同;它们保持原始数据点的时间戳。

示例

以下查询为每个 18 分钟 GROUP BY time() 间隔返回两个数据点。请注意,返回的时间戳是数据点的原始时间戳;它们不会强制匹配 GROUP BY time() 间隔的开始。

SELECT BOTTOM("water_level",2) FROM "h2o_feet" WHERE time >= '2019-08-18T00:00:00Z' AND time <= '2019-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(18m)

name: h2o_feet

timebottom
2019-08-18T00:00:00Z2.064
2019-08-18T00:12:00Z2.028
2019-08-18T00:24:00Z2.041
2019-08-18T00:30:00Z2.051

请注意,前两行包含第一个时间间隔的最小值,最后两行包含第二个时间间隔的最小值。

BOTTOM() 和标签键的标签值少于 N 个

语法为 SELECT BOTTOM(<field_key>,<tag_key>,<N>) 的查询可能会返回少于预期的数据点。如果标签键有 X 个标签值,查询指定 N 个值,并且 X 小于 N,则查询返回 X 个数据点。

示例

以下查询请求 location 标签键的三个标签值的 water_level 的最小字段值。由于 location 标签键有两个标签值(santa_monicacoyote_creek),因此查询返回两个数据点而不是三个。

SELECT BOTTOM("water_level","location",3) FROM "h2o_feet"

name: h2o_feet

timebottomlocation
2019-08-29T10:36:00Z-0.243santa_monica
2019-08-29T14:30:00Z-0.610coyote_creek

FIRST()

返回具有最旧时间戳的字段值

语法

SELECT FIRST(<field_key>)[,<tag_key(s)>|<field_key(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

FIRST(field_key)
返回与字段键关联的最旧字段值(由时间戳确定)。

FIRST(/regular_expression/)
返回与每个匹配正则表达式的字段键关联的最旧字段值(由时间戳确定)。

FIRST(*)
返回与measurement中每个字段键关联的最旧字段值(由时间戳确定)。

FIRST(field_key),tag_key(s),field_key(s)
返回与括号中的字段键以及相关的标签和/或字段关联的最旧字段值(由时间戳确定)。

FIRST() 支持所有字段值数据类型

示例

选择与字段键关联的首个字段值

选择 measurement 中与每个字段键关联的首个字段值

选择与每个匹配正则表达式的字段键关联的首个字段值

选择与字段键以及相关标签和字段关联的首个值

选择与字段键关联的首个字段值,并包含多个子句

LAST()

返回具有最新时间戳的字段值

语法

SELECT LAST(<field_key>)[,<tag_key(s)>|<field_keys(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

LAST(field_key)
返回与字段键关联的最新字段值(由时间戳确定)。

LAST(/regular_expression/)
返回与每个匹配正则表达式的字段键关联的最新字段值(由时间戳确定)。

LAST(*)
返回与measurement中每个字段键关联的最新字段值(由时间戳确定)。

LAST(field_key),tag_key(s),field_key(s)
返回与括号中的字段键以及相关的标签和/或字段关联的最新字段值(由时间戳确定)。

LAST() 支持所有字段值数据类型

示例

选择与字段键关联的末个字段值

选择 measurement 中与每个字段键关联的末个字段值

选择与每个匹配正则表达式的字段键关联的末个字段值

选择与字段键以及相关标签和字段关联的末个字段值

选择与字段键关联的最后一个字段值,并包含多个子句

MAX()

返回最大的字段值

语法

SELECT MAX(<field_key>)[,<tag_key(s)>|<field__key(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

MAX(字段键)
返回与字段键关联的最大字段值。

MAX(/正则表达式/)
返回与每个匹配正则表达式的字段键关联的最大字段值。

MAX(*)
返回与measurement中每个字段键关联的最大字段值。

MAX(字段键),标签键(s),字段键(s)
返回与括号中字段键关联的最大字段值以及相关的标签和/或字段

MAX() 支持 int64 和 float64 字段值数据类型

示例

选择与字段键关联的最大字段值

选择 measurement 中与每个字段键关联的最大字段值

选择与匹配正则表达式的每个字段键关联的最大字段值

选择与字段键关联的最大字段值以及相关的标签和字段

选择与字段键关联的最大字段值,并包含多个子句

MIN()

返回最小的字段值

语法

SELECT MIN(<field_key>)[,<tag_key(s)>|<field_key(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

MIN(字段键)
返回与字段键关联的最小字段值。

MIN(/正则表达式/)
返回与每个匹配正则表达式的字段键关联的最小字段值。

MIN(*)
返回与measurement中每个字段键关联的最小字段值。

MIN(字段键),标签键(s),字段键(s)
返回与括号中字段键关联的最小字段值以及相关的标签和/或字段

MIN() 支持 int64 和 float64 字段值数据类型

示例

选择与字段键关联的最小字段值

选择 measurement 中与每个字段键关联的最小字段值

选择与匹配正则表达式的每个字段键关联的最小字段值

选择与字段键关联的最小字段值以及相关的标签和字段

选择与字段键关联的最小字段值,并包含多个子句

PERCENTILE()

返回第 N 个百分位数字段值

语法

SELECT PERCENTILE(<field_key>, <N>)[,<tag_key(s)>|<field_key(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

PERCENTILE(字段键,N)
返回与字段键关联的第 N 个百分位数字段值。

PERCENTILE(/正则表达式/,N)
返回与每个匹配正则表达式的字段键关联的第 N 个百分位数字段值。

PERCENTILE(*,N)
返回与measurement中每个字段键关联的第 N 个百分位数字段值。

PERCENTILE(字段键,N),标签键(s),字段键(s)
返回与括号中字段键关联的第 N 个百分位数字段值以及相关的标签和/或字段

N 必须是介于 0100 之间的整数或浮点数,包括 0100PERCENTILE() 支持 int64 和 float64 字段值数据类型

示例

选择与字段键关联的第五个百分位数字段值

选择 measurement 中与每个字段键关联的第五个百分位数字段值

选择与匹配正则表达式的每个字段键关联的第五个百分位数字段值

选择与字段键关联的第五个百分位数字段值以及相关的标签和字段

选择与字段键关联的第二十个百分位数字段值,并包含多个子句

PERCENTILE() 的常见问题

PERCENTILE() 与其他 InfluxQL 函数的比较

  • PERCENTILE(<field_key>,100) 等同于 MAX(<field_key>)
  • PERCENTILE(<field_key>, 50) 几乎等同于 MEDIAN(<field_key>),但如果字段键包含偶数个字段值,则 MEDIAN() 函数返回两个中间值的平均值。
  • PERCENTILE(<field_key>,0) 不等同于 MIN(<field_key>)。这是一个已知的问题

SAMPLE()

返回 N字段值的随机样本。SAMPLE() 使用 水库抽样来生成随机点。

语法

SELECT SAMPLE(<field_key>, <N>)[,<tag_key(s)>|<field_key(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

SAMPLE(字段键,N)
返回与字段键关联的 N 个随机选择的字段值。

SAMPLE(/正则表达式/,N)
返回与每个匹配正则表达式的字段键关联的 N 个随机选择的字段值。

SAMPLE(*,N)
返回与measurement中每个字段键关联的 N 个随机选择的字段值。

SAMPLE(字段键,N),标签键(s),字段键(s)
返回与括号中字段键关联的 N 个随机选择的字段值以及相关的标签和/或字段

N 必须是整数。SAMPLE() 支持所有字段值数据类型

示例

选择与字段键关联的字段值样本

选择 measurement 中与每个字段键关联的字段值样本

选择与匹配正则表达式的每个字段键关联的字段值样本

选择与字段键关联的字段值样本以及相关的标签和字段

选择与字段键关联的字段值样本,并包含多个子句

SAMPLE() 的常见问题

带有 GROUP BY time() 子句的 SAMPLE()

带有 SAMPLE()GROUP BY time() 子句的查询为每个 GROUP BY time() 间隔返回指定数量的点 (N)。对于大多数 GROUP BY time() 查询,返回的时间戳标记 GROUP BY time() 间隔的开始时间。带有 SAMPLE() 函数的 GROUP BY time() 查询的行为有所不同;它们保持原始数据点的时间戳。

示例

以下查询为每个 18 分钟的 GROUP BY time() 间隔返回两个随机选择的点。请注意,返回的时间戳是点的原始时间戳;它们不会被强制与 GROUP BY time() 间隔的开始时间匹配。

SELECT SAMPLE("water_level",2) FROM "h2o_feet" WHERE time >= '2019-08-18T00:00:00Z' AND time <= '2019-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(18m)

name: h2o_feet

timesample
2019-08-18T00:06:00Z2.116
2019-08-18T00:12:00Z2.028
2019-08-18T00:18:00Z2.126
2019-08-18T00:30:00Z2.051

请注意,前两行是从第一个时间间隔中随机选择的点,最后两行是从第二个时间间隔中随机选择的点。

TOP()

返回最大的 N字段值

语法

SELECT TOP( <field_key>[,<tag_key(s)>],<N> )[,<tag_key(s)>|<field_key(s)>] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

TOP(字段键,N)
返回与字段键关联的 N 个最大字段值。

TOP(字段键,标签键(s),N)
返回标签键的 N 个标签值的最大字段值。

TOP(字段键,N),标签键(s),字段键(s)
返回与括号中字段键关联的 N 个最大字段值以及相关的标签和/或字段

TOP() 支持 int64 和 float64 字段值数据类型

注意: 如果两个或多个值的最大值相同,TOP() 返回时间戳最早的字段值。

示例

选择与字段键关联的前三个字段值

为两个标签选择与字段键关联的顶部字段值

选择与字段键关联的前四个字段值以及相关的标签和字段

选择与字段键关联的前三个字段值,并包含多个子句

TOP() 的常见问题

带有 GROUP BY time() 子句的 TOP()

带有 TOP()GROUP BY time() 子句的查询为每个 GROUP BY time() 间隔返回指定数量的点。对于大多数 GROUP BY time() 查询,返回的时间戳标记 GROUP BY time() 间隔的开始时间。带有 TOP() 函数的 GROUP BY time() 查询的行为有所不同;它们保持原始数据点的时间戳。

示例

以下查询为每个 18 分钟 GROUP BY time() 间隔返回两个数据点。请注意,返回的时间戳是数据点的原始时间戳;它们不会强制匹配 GROUP BY time() 间隔的开始。

SELECT TOP("water_level",2) FROM "h2o_feet" WHERE time >= '2019-08-18T00:00:00Z' AND time <= '2019-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(18m)

name: h2o_feet

timetop
2019-08-18T00:00:00Z2.064
2019-08-18T00:06:00Z2.116
2019-08-18T00:18:00Z2.126
2019-08-18T00:30:00Z2.051

请注意,前两行是第一个时间间隔的最大点,最后两行是第二个时间间隔的最大点。

TOP() 和标签键的标签值少于 N 个

语法为 SELECT TOP(<field_key>,<tag_key>,<N>) 的查询可能会返回少于预期的点。如果标签键有 X 个标签值,查询指定 N 个值,并且 X 小于 N,则查询返回 X 个点。

示例

以下查询要求 location 标签键的三个标签值的 water_level 的最大字段值。由于 location 标签键有两个标签值(santa_monicacoyote_creek),因此查询返回两个点而不是三个。

SELECT TOP("water_level","location",3) FROM "h2o_feet"

name: h2o_feet

timetoplocation
2019-08-29T03:54:00Z7.205santa_monica
2019-08-29T07:24:00Z9.964coyote_creek

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、最新数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看