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
。
示例
选择与字段键关联的最小三个字段值
返回 water_level
字段键和 h2o_feet
measurement 中的最小三个字段值。
SELECT BOTTOM("water_level",3) FROM "h2o_feet"
time | bottom |
---|
2019-08-29T14:30:00Z | -0.610 |
2019-08-29T14:36:00Z | -0.591 |
2019-08-30T15:18:00Z | -0.594 |
选择与字段键关联的最小三个字段值,并包含多个子句
返回 water_level
字段键中,2019-08-18T00:00:00Z
和 2019-08-18T00:54:00Z
之间每个 24 分钟间隔的最小三个值,结果按降序时间戳排序。
SELECT BOTTOM("water_level",3),"location" FROM "h2o_feet" WHERE time >= '2019-08-18T00:00:00Z' AND time <= '2019-08-18T00:54:00Z' GROUP BY time(24m) ORDER BY time DESC
time | bottom | location |
---|
2019-08-18T00:54:00Z | 2.172 | santa_monica |
2019-08-18T00:54:00Z | 7.510 | coyote_creek |
2019-08-18T00:48:00Z | 2.087 | santa_monica |
2019-08-18T00:42:00Z | 2.093 | santa_monica |
2019-08-18T00:36:00Z | 2.1261441420 | santa_monica |
2019-08-18T00:24:00Z | 2.264 | santa_monica |
2019-08-18T00:18:00Z | 2.329 | santa_monica |
2019-08-18T00:12:00Z | 2.343 | santa_monica |
2019-08-18T00:00:00Z | 2.352 | santa_monica |
请注意,GROUP BY time() 子句不会覆盖数据点的原始时间戳。有关该行为的更详细说明,请参阅下面部分中的问题 1。
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)
time | bottom |
---|
2019-08-18T00:00:00Z | 2.064 |
2019-08-18T00:12:00Z | 2.028 |
2019-08-18T00:24:00Z | 2.041 |
2019-08-18T00:30:00Z | 2.051 |
请注意,前两行包含第一个时间间隔的最小值,最后两行包含第二个时间间隔的最小值。
BOTTOM() 和标签键的标签值少于 N 个
语法为 SELECT BOTTOM(<field_key>,<tag_key>,<N>)
的查询可能会返回少于预期的数据点。如果标签键有 X
个标签值,查询指定 N
个值,并且 X
小于 N
,则查询返回 X
个数据点。
示例
以下查询请求 location
标签键的三个标签值的 water_level
的最小字段值。由于 location
标签键有两个标签值(santa_monica
和 coyote_creek
),因此查询返回两个数据点而不是三个。
SELECT BOTTOM("water_level","location",3) FROM "h2o_feet"
time | bottom | location |
---|
2019-08-29T10:36:00Z | -0.243 | santa_monica |
2019-08-29T14:30:00Z | -0.610 | coyote_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()
支持所有字段值数据类型。
示例
选择与字段键关联的首个字段值
返回与 level description
字段键和 h2o_feet
measurement 关联的最旧字段值(由时间戳确定)。
SELECT FIRST("level description") FROM "h2o_feet"
time | first |
---|
2019-08-17T00:00:00Z | between 6 and 9 feet |
选择 measurement 中与每个字段键关联的首个字段值
返回 h2o_feet
measurement 中每个字段键的最旧字段值(由时间戳确定)。h2o_feet
measurement 有两个字段键:level description
和 water_level
。
SELECT FIRST(*) FROM "h2o_feet"
time | first_level description | first_water_level |
---|
1970-01-01T00:00:00Z | between 6 and 9 feet | 8.120 |
选择与每个匹配正则表达式的字段键关联的首个字段值
返回 h2o_feet
measurement 中每个包含单词 level
的字段键的最旧字段值。
SELECT FIRST(/level/) FROM "h2o_feet"
time | first_level description | first_water_level |
---|
1970-01-01T00:00:00Z | between 6 and 9 feet | 8.120 |
选择与字段键关联的首个字段值,并包含多个子句
返回 时间范围 2019-08-17T23:48:00Z
和 2019-08-18T00:54:00Z
之间,以及分组为 12 分钟时间间隔和每个标签的 water_level
字段键中最旧的字段值(由时间戳确定)。然后,填充空时间间隔为 9.01
,并限制返回的数据点和序列的数量分别为四个和一个。
SELECT FIRST("water_level") FROM "h2o_feet" WHERE time >= '2019-08-17T23:48:00Z' AND time <= '2019-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
time | first |
---|
2019-08-17T23:48:00Z | 8.635 |
2019-08-18T00:00:00Z | 8.504 |
2019-08-18T00:12:00Z | 8.320 |
2019-08-18T00:24:00Z | 8.130 |
请注意,GROUP BY time()
子句覆盖了数据点的原始时间戳。结果中的时间戳指示每个 12 分钟时间间隔的开始;结果中的第一个数据点涵盖 2019-08-17T23:48:00Z
和刚好在 2019-08-18T00:00:00Z
之间的时间间隔,结果中的最后一个数据点涵盖 2019-08-18T00:24:00Z
和刚好在 2019-08-18T00:36:00Z
之间的时间间隔。
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()
支持所有字段值数据类型。
示例
选择与字段键关联的末个字段值
返回与 level description
字段键和 h2o_feet
measurement 关联的最新字段值(由时间戳确定)。
SELECT LAST("level description") FROM "h2o_feet"
time | last |
---|
2019-09-17T21:42:00Z | between 3 and 6 feet |
选择 measurement 中与每个字段键关联的末个字段值
返回 h2o_feet
measurement 中每个字段键的最新字段值(由时间戳确定)。h2o_feet
measurement 有两个字段键:level description
和 water_level
。
SELECT LAST(*) FROM "h2o_feet"
time | last_level description | last_water_level |
---|
1970-01-01T00:00:00Z | between 3 and 6 feet | 4.938 |
选择与每个匹配正则表达式的字段键关联的末个字段值
返回 h2o_feet
measurement 中每个包含单词 level
的字段键的最新字段值。
SELECT LAST(/level/) FROM "h2o_feet"
time | last_level description | last_water_level |
---|
1970-01-01T00:00:00Z | between 3 and 6 feet | 4.938 |
选择与字段键关联的最后一个字段值,并包含多个子句
返回 water_level
字段键在 2019-08-17T23:48:00Z
和 2019-08-18T00:54:00Z
之间的时间范围内最新的字段值(由时间戳确定),并按 12 分钟的时间间隔和每个标签分组结果。然后使用 9.01
填充空时间间隔,并限制返回的点和序列的数量分别为四个和一个。
SELECT LAST("water_level") FROM "h2o_feet" WHERE time >= '2019-08-17T23:48:00Z' AND time <= '2019-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
time | last |
---|
2019-08-17T23:48:00Z | 8.570 |
2019-08-18T00:00:00Z | 8.419 |
2019-08-18T00:12:00Z | 8.225 |
2019-08-18T00:24:00Z | 8.012 |
请注意,GROUP BY time()
子句覆盖了数据点的原始时间戳。结果中的时间戳指示每个 12 分钟时间间隔的开始;结果中的第一个数据点涵盖 2019-08-17T23:48:00Z
和刚好在 2019-08-18T00:00:00Z
之间的时间间隔,结果中的最后一个数据点涵盖 2019-08-18T00:24:00Z
和刚好在 2019-08-18T00:36:00Z
之间的时间间隔。
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 字段值数据类型。
示例
选择与字段键关联的最大字段值
返回 water_level
字段键和 h2o_feet
measurement 中的最大字段值。
SELECT MAX("water_level") FROM "h2o_feet"
time | max |
---|
2019-08-28T07:24:00Z | 9.964 |
选择 measurement 中与每个字段键关联的最大字段值
返回 h2o_feet
measurement 中存储数值的每个字段键的最大字段值。h2o_feet
measurement 有一个数值字段:water_level
。
SELECT MAX(*) FROM "h2o_feet"
time | max_water_level |
---|
2019-08-28T07:24:00Z | 9.964 |
选择与匹配正则表达式的每个字段键关联的最大字段值
返回 h2o_feet
measurement 中,每个存储数值并包含单词 water
的字段键的最大字段值。
SELECT MAX(/level/) FROM "h2o_feet"
time | max_water_level |
---|
2019-08-28T07:24:00Z | 9.964 |
选择与字段键关联的最大字段值,并包含多个子句
返回 water_level
字段键在 2019-08-17T23:48:00Z
和 2019-08-18T00:54:00Z
之间的时间范围内最大的字段值,并按 12 分钟的时间间隔和每个标签分组结果。然后使用 9.01
填充空时间间隔,并限制返回的点和序列的数量分别为四个和一个。
SELECT MAX("water_level") FROM "h2o_feet" WHERE time >= '2019-08-17T23:48:00Z' AND time <= '2019-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
time | max |
---|
2019-08-17T23:48:00Z | 8.635 |
2019-08-18T00:00:00Z | 8.504 |
2019-08-18T00:12:00Z | 8.320 |
2019-08-18T00:24:00Z | 8.130 |
请注意,GROUP BY time()
子句覆盖了数据点的原始时间戳。结果中的时间戳指示每个 12 分钟时间间隔的开始;结果中的第一个数据点涵盖 2019-08-17T23:48:00Z
和刚好在 2019-08-18T00:00:00Z
之间的时间间隔,结果中的最后一个数据点涵盖 2019-08-18T00:24:00Z
和刚好在 2019-08-18T00:36:00Z
之间的时间间隔。
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 字段值数据类型。
示例
选择与字段键关联的最小字段值
返回 water_level
字段键和 h2o_feet
measurement 中的最小字段值。
SELECT MIN("water_level") FROM "h2o_feet"
time | min |
---|
2019-08-28T14:30:00Z | -0.610 |
选择 measurement 中与每个字段键关联的最小字段值
返回 h2o_feet
measurement 中存储数值的每个字段键的最小字段值。h2o_feet
measurement 有一个数值字段:water_level
。
SELECT MIN(*) FROM "h2o_feet"
time | min_water_level |
---|
2019-08-28T14:30:00Z | -0.610 |
选择与匹配正则表达式的每个字段键关联的最小字段值
返回 h2o_feet
measurement 中,每个字段键中包含 water
的数值字段的最小字段值。
SELECT MIN(/level/) FROM "h2o_feet"
time | min_water_level |
---|
2019-08-28T14:30:00Z | -0.610 |
选择与字段键关联的最小字段值,并包含多个子句
返回 water_level
字段键在 2019-08-17T23:48:00Z
和 2019-08-18T00:54:00Z
之间的时间范围内最小的字段值,并按 12 分钟的时间间隔和每个标签分组结果。然后使用 9.01
填充空时间间隔,并限制返回的点和序列的数量分别为四个和一个。
SELECT MIN("water_level") FROM "h2o_feet" WHERE time >= '2019-08-17T23:48:00Z' AND time <= '2019-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
time | min |
---|
2019-08-17T23:48:00Z | 8.570 |
2019-08-18T00:00:00Z | 8.419 |
2019-08-18T00:12:00Z | 8.225 |
2019-08-18T00:24:00Z | 8.012 |
请注意,GROUP BY time()
子句覆盖了数据点的原始时间戳。结果中的时间戳指示每个 12 分钟时间间隔的开始;结果中的第一个数据点涵盖 2019-08-17T23:48:00Z
和刚好在 2019-08-18T00:00:00Z
之间的时间间隔,结果中的最后一个数据点涵盖 2019-08-18T00:24:00Z
和刚好在 2019-08-18T00:36:00Z
之间的时间间隔。
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
必须是介于 0
和 100
之间的整数或浮点数,包括 0
和 100
。PERCENTILE()
支持 int64 和 float64 字段值数据类型。
示例
选择与字段键关联的第五个百分位数字段值
返回大于 water_level
字段键和 h2o_feet
measurement 中字段值百分之五的字段值。
SELECT PERCENTILE("water_level",5) FROM "h2o_feet"
time | percentile |
---|
2019-09-01T17:54:00Z | 1.122 |
选择 measurement 中与每个字段键关联的第五个百分位数字段值
返回大于 h2o_feet
measurement 中存储数值的每个字段键中字段值百分之五的字段值。h2o_feet
measurement 有一个数值字段:water_level
。
SELECT PERCENTILE(*,5) FROM "h2o_feet"
time | percentile_water_level |
---|
2019-09-01T17:54:00Z | 1.122 |
选择与匹配正则表达式的每个字段键关联的第五个百分位数字段值
返回大于每个字段键中包含 water
的数值字段中字段值百分之五的字段值。
SELECT PERCENTILE(/level/,5) FROM "h2o_feet"
time | percentile_water_level |
---|
2019-09-01T17:54:00Z | 1.122 |
选择与字段键关联的第二十个百分位数字段值,并包含多个子句
返回大于 water_level
字段在 2019-08-17T23:48:00Z
和 2019-08-18T00:54:00Z
之间的时间范围内值百分之二十的字段值,并按 24 分钟的时间间隔分组结果。然后使用 15
填充空时间间隔,并限制返回的点数为两个。
SELECT PERCENTILE("water_level",20) FROM "h2o_feet" WHERE time >= '2019-08-17T23:48:00Z' AND time <= '2019-08-18T00:54:00Z' GROUP BY time(24m) fill(15) LIMIT 2
time | percentile |
---|
2019-08-17T23:36:00Z | 2.398 |
2019-08-18T00:00:00Z | 2.343 |
请注意,GROUP BY time()
子句会覆盖点的原始时间戳。结果中的时间戳指示每个 24 分钟时间间隔的开始时间;结果中的第一个点涵盖 2019-08-17T23:36:00Z
到 2019-08-18T00:00:00Z
之前的时间间隔,结果中的最后一个点涵盖 2019-08-18T00:00:00Z
到 2019-08-18T00:24:00Z
之前的时间间隔。
PERCENTILE() 的常见问题
PERCENTILE() 与其他 InfluxQL 函数的比较
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()
支持所有字段值数据类型。
示例
选择与字段键关联的字段值样本
从 water_level
字段键和 h2o_feet
measurement 中返回两个随机选择的点。
SELECT SAMPLE("water_level",2) FROM "h2o_feet"
time | sample |
---|
2019-08-22T03:42:00Z | 7.218 |
2019-08-28T20:18:00Z | 2.848 |
选择 measurement 中与每个字段键关联的字段值样本
为 h2o_feet
measurement 中的每个字段键返回两个随机选择的点。h2o_feet
measurement 有两个字段键:level description
和 water_level
。
SELECT SAMPLE(*,2) FROM "h2o_feet"
time | sample_level description | sample_water_level |
---|
2019-08-23T17:30:00Z | below 3 feet | |
2019-09-08T19:18:00Z | | 8.379 |
2019-09-09T03:54:00Z | between 6 and 9 feet | |
2019-09-16T04:48:00Z | | 1.437 |
选择与匹配正则表达式的每个字段键关联的字段值样本
为 h2o_feet
measurement 中包含单词 level
的每个字段键返回两个随机选择的点。
SELECT SAMPLE(/level/,2) FROM "h2o_feet"
time | sample_level description | sample_water_level |
---|
2019-08-19T20:24:00Z | | 4.951 |
2019-08-26T06:30:00Z | below 3 feet | |
2019-09-10T09:06:00Z | | 1.312 |
2019-09-16T21:00:00Z | between 3 and 6 feet | |
选择与字段键关联的字段值样本,并包含多个子句
从 2019-08-18T00:00:00Z
和 2019-08-18T00:30:00Z
之间的时间范围内的 water_level
字段键中返回一个随机选择的点,并按 18 分钟的时间间隔分组结果。
SELECT SAMPLE("water_level",1) 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)
time | sample |
---|
2019-08-18T00:12:00Z | 2.343 |
2019-08-18T00:24:00Z | 2.264 |
请注意,GROUP BY time()
子句不会覆盖点的原始时间戳。有关该行为的更详细说明,请参阅下面部分中的问题 1。
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)
time | sample |
---|
2019-08-18T00:06:00Z | 2.116 |
2019-08-18T00:12:00Z | 2.028 |
2019-08-18T00:18:00Z | 2.126 |
2019-08-18T00:30:00Z | 2.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()
返回时间戳最早的字段值。
示例
选择与字段键关联的前三个字段值
返回 water_level
字段键和 h2o_feet
measurement 中最大的三个字段值。
SELECT TOP("water_level",3) FROM "h2o_feet"
time | top |
---|
2019-08-28T07:18:00Z | 9.957 |
2019-08-28T07:24:00Z | 9.964 |
2019-08-28T07:30:00Z | 9.954 |
选择与字段键关联的前三个字段值,并包含多个子句
为 2019-08-18T00:00:00Z
和 2019-08-18T00:54:00Z
之间每个 24 分钟的间隔返回 water_level
字段键中最大的三个值,结果按时间戳降序排列。
SELECT TOP("water_level",3),"location" FROM "h2o_feet" WHERE time >= '2019-08-18T00:00:00Z' AND time <= '2019-08-18T00:54:00Z' GROUP BY time(24m) ORDER BY time DESC
time | top | location |
---|
2019-08-18T00:54:00Z | 6.982 | coyote_creek |
2019-08-18T00:54:00Z | 2.054 | santa_monica |
2019-08-18T00:48:00Z | 7.110 | coyote_creek |
2019-08-18T00:36:00Z | 7.372 | coyote_creek |
2019-08-18T00:30:00Z | 7.500 | coyote_creek |
2019-08-18T00:24:00Z | 7.635 | coyote_creek |
2019-08-18T00:12:00Z | 7.887 | coyote_creek |
2019-08-18T00:06:00Z | 8.005 | coyote_creek |
2019-08-18T00:00:00Z | 8.120 | coyote_creek |
请注意,GROUP BY time() 子句不会覆盖点的原始时间戳。有关该行为的更详细说明,请参阅下面部分中的问题 1。
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)
time | top |
---|
2019-08-18T00:00:00Z | 2.064 |
2019-08-18T00:06:00Z | 2.116 |
2019-08-18T00:18:00Z | 2.126 |
2019-08-18T00:30:00Z | 2.051 |
请注意,前两行是第一个时间间隔的最大点,最后两行是第二个时间间隔的最大点。
TOP() 和标签键的标签值少于 N 个
语法为 SELECT TOP(<field_key>,<tag_key>,<N>)
的查询可能会返回少于预期的点。如果标签键有 X
个标签值,查询指定 N
个值,并且 X
小于 N
,则查询返回 X
个点。
示例
以下查询要求 location
标签键的三个标签值的 water_level
的最大字段值。由于 location
标签键有两个标签值(santa_monica
和 coyote_creek
),因此查询返回两个点而不是三个。
SELECT TOP("water_level","location",3) FROM "h2o_feet"
time | top | location |
---|
2019-08-29T03:54:00Z | 7.205 | santa_monica |
2019-08-29T07:24:00Z | 9.964 | coyote_creek |
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您对 InfluxDB 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。