InfluxQL 选择器函数
使用选择器函数来评估、选择和返回您数据中的值。选择器函数返回每个 InfluxQL 组中具有选定值的一行或多行。
下面每个选择器函数涵盖了 语法,包括传递给函数的参数,以及 如何使用该函数的示例。示例使用 NOAA水样数据。
底部()
返回最小的 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 和/或 field。多个标签或字段键之间用逗号分隔:tag_key,tag_key,field_key,field_key。
示例
选择与字段键关联的最低三个字段值
返回water_level字段键中的最小三个值,以及h2o_feet 测量。
SELECT BOTTOM("water_level",3) FROM "h2o_feet"
| 时间 | 底部 |
|---|
| 2019-08-29T14:30:00Z | -0.610 |
| 2019-08-29T14:36:00Z | -0.591 |
| 2019-08-30T15:18:00Z | -0.594 |
选择与字段键关联的最低三个字段值并包含多个子句
返回每个24分钟区间内water_level字段键的最小三个值,时间范围为2019-08-18T00:00:00Z至2019-08-18T00:54:00Z,结果按时间戳递减顺序排列。
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
| 时间 | 底部 | 位置 |
|---|
| 2019-08-18T00:54:00Z | 2.172 | 圣塔莫尼卡 |
| 2019-08-18T00:54:00Z | 7.510 | 郊狼溪 |
| 2019-08-18T00:48:00Z | 2.087 | 圣塔莫尼卡 |
| 2019-08-18T00:42:00Z | 2.093 | 圣塔莫尼卡 |
| 2019-08-18T00:36:00Z | 2.1261441420 | 圣塔莫尼卡 |
| 2019-08-18T00:24:00Z | 2.264 | 圣塔莫尼卡 |
| 2019-08-18T00:18:00Z | 2.329 | 圣塔莫尼卡 |
| 2019-08-18T00:12:00Z | 2.343 | 圣塔莫尼卡 |
| 2019-08-18T00:00:00Z | 2.352 | 圣塔莫尼卡 |
请注意,GROUP BY time() 子句 不会覆盖点的原始时间戳。有关该行为的更详细解释,请参见下面的问题 1部分。
BOTTOM() 的常见问题
BOTTOM() 与 GROUP BY time() 子句
带有 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)
| 时间 | 底部 |
|---|
| 2019年08月18日T00: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"
| 时间 | 底部 | 位置 |
|---|
| 2019-08-29T10:36:00Z | -0.243 | 圣塔莫尼卡 |
| 2019-08-29T14:30:00Z | -0.610 | coyote_creek |
第一次()
返回具有最早时间戳的 字段值 。
语法
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)
返回与括号中的字段键及相关的tag和/或field关联的最旧字段值(由时间戳确定)。
FIRST() 支持所有字段值 数据类型。
示例
选择与字段键关联的第一个字段值
返回与level description字段键相关联的最旧字段值(由时间戳确定),并在h2o_feet测量中。
SELECT FIRST("level description") FROM "h2o_feet"
| 时间 | 首次 |
|---|
| 2019-08-17T00:00:00Z | 在6到9英尺之间 |
选择与测量中每个字段键相关联的第一个字段值
返回每个字段键的最旧字段值(由时间戳确定),在h2o_feet测量中。
h2o_feet测量具有两个字段键:level description和water_level。
SELECT FIRST(*) FROM "h2o_feet"
| 时间 | 第一层级描述 | 第一水位 |
|---|
| 1970-01-01T00:00:00Z | 在6到9英尺之间 | 8.120 |
选择与每个字段键匹配正则表达式的第一个字段值
返回每个字段键中包含单词 level 的 h2o_feet 测量的最旧字段值。
SELECT FIRST(/level/) FROM "h2o_feet"
| 时间 | 第一层描述 | 第一水位 |
|---|
| 1970-01-01T00:00:00Z | 在6到9英尺之间 | 8.120 |
选择与字段键相关的第一个字段值并包含多个子句
返回在 water_level 字段键中最旧的字段值(由时间戳确定),在 时间范围
之间 2019-08-17T23:48:00Z 和 2019-08-18T00:54:00Z 之间,并且
将结果分组 成为
12分钟的时间间隔和每个标签。然后 填充
空的时间间隔为 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
| 时间 | 首次 |
|---|
| 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 之前之间的时间间隔。
最后()
返回具有最新时间戳的 字段值。
语法
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)
返回与括号中的字段键相关的最新字段值(由时间戳确定)以及相关的 tag 和/或 field。
LAST() 支持所有字段值 数据类型。
示例
选择与字段键关联的最后字段值
返回与level description字段键关联的最新字段值(由时间戳决定),并在h2o_feet测量中。
SELECT LAST("level description") FROM "h2o_feet"
| 时间 | 最后 |
|---|
| 2019-09-17T21:42:00Z | 在3到6英尺之间 |
选择与测量中每个字段键相关联的最后字段值
返回每个字段键的最新字段值(根据时间戳确定),在 h2o_feet 测量中。 h2o_feet 测量具有两个字段键: level description 和 water_level。
SELECT LAST(*) FROM "h2o_feet"
| 时间 | 最后级别描述 | 最后水位 |
|---|
| 1970-01-01T00:00:00Z | 在3到6英尺之间 | 4.938 |
选择与每个字段键匹配正则表达式的最后一个字段值
返回包含单词 level 的每个字段键的最新字段值,在 h2o_feet 测量中。
SELECT LAST(/level/) FROM "h2o_feet"
| 时间 | 最后一级描述 | 最后水位 |
|---|
| 1970-01-01T00:00:00Z | 介于3和6英尺之间 | 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
| 时间 | 最后 |
|---|
| 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 之前之间的时间间隔。
最大值()
返回最大的 字段值。
语法
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(field_key)
返回与字段键相关联的最大字段值。
MAX(/regular_expression/)
返回与每个匹配正则表达式的字段键相关联的最大字段值。
MAX(*)
返回与每个字段键相关联的最大字段值,位于measurement中。
MAX(field_key),tag_key(s),field_key(s)
返回与括号中的字段键相关联的最大字段值,以及相关的 tag 和/或 field。
MAX() 支持 int64 和 float64 字段值 数据类型。
示例
选择与字段键相关的最大字段值
返回 water_level 字段键和 h2o_feet 测量中的最大字段值。
SELECT MAX("water_level") FROM "h2o_feet"
| 时间 | 最大值 |
|---|
| 2019-08-28T07:24:00Z | 9.964 |
选择与每个字段键关联的最大字段值
返回每个存储数值的字段键的最大字段值
在 h2o_feet 测量中。
h2o_feet 测量有一个数值字段: water_level。
SELECT MAX(*) FROM "h2o_feet"
| 时间 | 最高水位 |
|---|
| 2019-08-28T07:24:00Z | 9.964 |
选择与每个字段键匹配的正则表达式相关联的最大字段值
返回每个存储数值的字段键的最大字段值,并且包含单词 water 在 h2o_feet 测量中。
SELECT MAX(/level/) FROM "h2o_feet"
| 时间 | 最高水位 |
|---|
| 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
| 时间 | 最大值 |
|---|
| 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 之前之间的时间间隔。
最小值()
返回最低的 字段值。
语法
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(field_key)
返回与字段键相关联的最低字段值。
MIN(/regular_expression/)
返回与每个匹配正则表达式的字段键相关联的最低字段值。
MIN(*)
返回与measurement中每个字段键相关联的最低字段值。
MIN(field_key),tag_key(s),field_key(s)
返回与括号中的字段键相关联的最低字段值以及相关的 tag 和/或 field。
MIN() 支持 int64 和 float64 字段值 数据类型。
示例
选择与字段键关联的最小字段值
返回 water_level 字段键中和 h2o_feet 测量中的最低字段值。
SELECT MIN("water_level") FROM "h2o_feet"
| 时间 | 分钟 |
|---|
| 2019-08-28T14:30:00Z | -0.610 |
选择与测量中每个字段键相关联的最小字段值
返回存储数值的每个字段键的最低字段值,单位为 h2o_feet 测量。
h2o_feet 测量具有一个数值字段: water_level。
SELECT MIN(*) FROM "h2o_feet"
| 时间 | 最小水位 |
|---|
| 2019-08-28T14:30:00Z | -0.610 |
选择与每个字段键匹配正则表达式的最小字段值
返回每个数值字段中包含 water 的字段键的最低字段值,位于 h2o_feet 测量中。
SELECT MIN(/level/) FROM "h2o_feet"
| 时间 | 最低水位 |
|---|
| 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
| 时间 | 分钟 |
|---|
| 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 之前之间的时间间隔。
百分位数()
返回第 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(field_key,N)
返回与字段键相关联的第N个百分位字段值。
PERCENTILE(/regular_expression/,N)
返回与每个匹配正则表达式的字段键相关联的第N百分位字段值。
PERCENTILE(*,N)
返回与每个字段键相关联的第 N 个百分位字段值,来自 measurement。
PERCENTILE(field_key,N),tag_key(s),field_key(s)
返回与括号中的字段键相关联的第N个百分位字段值以及相关的 tag 和/或 field。
N 必须是一个在 0 和 100 之间(包括两者)的整数或浮点数。
PERCENTILE() 支持 int64 和 float64 字段值 数据类型。
示例
选择与字段键相关的第五百分位数字段值
返回在 water_level 字段键和 h2o_feet 测量中大于该字段值的五个百分点的字段值。
SELECT PERCENTILE("water_level",5) FROM "h2o_feet"
| 时间 | 百分位数 |
|---|
| 2019-09-01T17:54:00Z | 1.122 |
选择与测量中每个字段键关联的第五百分位数字段值
返回每个存储数字值的字段键中大于百分之五的字段值,h2o_feet 测量中。h2o_feet 测量有一个数字字段:water_level。
SELECT PERCENTILE(*,5) FROM "h2o_feet"
| 时间 | 水位百分位 |
|---|
| 2019-09-01T17:54:00Z | 1.122 |
选择与匹配正则表达式的每个字段键相关联的第五百分位数字段值
返回每个数值字段中字段值大于字段值的五百分之一的字段值,字段键中包含 water。
SELECT PERCENTILE(/level/,5) FROM "h2o_feet"
| 时间 | 百分位水位 |
|---|
| 2019-09-01T17:54:00Z | 1.122 |
选择与字段键相关联的第 двадцатый 百分位字段值,并包含几个子句
返回在时间范围内,water_level 字段中大于 20% 的值,
在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
| 时间 | 百分位数 |
|---|
| 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 函数的比较
样本()
返回 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(field_key,N)
返回与字段键相关联的N个随机选择的字段值。
SAMPLE(/regular_expression/,N)
返回与匹配正则表达式的每个字段键相关联的N个随机选择的字段值。
SAMPLE(*,N)
返回与每个字段键相关联的 N 个随机选择的字段值,来自 measurement。
SAMPLE(field_key,N),tag_key(s),field_key(s)
返回与括号中的字段键相关联的 N 个随机选择的字段值以及相关的 tag 和/或 field。
N 必须是一个整数。
SAMPLE() 支持所有字段值 数据类型。
示例
选择与字段键关联的字段值样本
从water_level字段键中返回两个随机选择的点,并在h2o_feet测量中。
SELECT SAMPLE("water_level",2) FROM "h2o_feet"
| 时间 | 样本 |
|---|
| 2019-08-22T03:42:00Z | 7.218 |
| 2019-08-28T20:18:00Z | 2.848 |
选择与测量中每个字段键相关联的字段值的样本
为每个字段键返回两个随机选择的点,字段键来自于 h2o_feet 测量。
h2o_feet 测量有两个字段键: level description 和 water_level。
SELECT SAMPLE(*,2) FROM "h2o_feet"
| 时间 | 样本级别描述 | 样本水位 |
|---|
| 2019-08-23T17:30:00Z | 低于3英尺 | |
| 2019-09-08T19:18:00Z | | 8.379 |
| 2019-09-09T03:54:00Z | 在6到9英尺之间 | |
| 2019-09-16T04:48:00Z | | 1.437 |
选择与每个字段键匹配的正则表达式相关的字段值的样本
返回每个字段键中包含单词
level 的 h2o_feet 测量的两个随机选择的点。
SELECT SAMPLE(/level/,2) FROM "h2o_feet"
| 时间 | 样本级别描述 | 样本水位 |
|---|
| 2019-08-19T20:24:00Z | | 4.951 |
| 2019-08-26T06:30:00Z | 低于3英尺 | |
| 2019-09-10T09:06:00Z | | 1.312 |
| 2019-09-16T21:00:00Z | 在3到6英尺之间 | |
选择与字段键相关联的字段值的样本,并包含多个子句
从时间范围内的water_level字段键中随机选择一个点,
在2019-08-18T00:00:00Z和2019-08-18T00:30:00Z之间,并将分组
结果分成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)
| 时间 | 样本 |
|---|
| 2019-08-18T00:12:00Z | 2.343 |
| 2019-08-18T00:24:00Z | 2.264 |
请注意,GROUP BY time() 子句 并不会覆盖点的原始时间戳。请参见下面部分的问题 1以获取对此行为的更详细解释。
SAMPLE() 的常见问题
SAMPLE() 与 GROUP BY time() 子句
使用 SAMPLE() 和 GROUP BY time() 子句的查询返回指定数量的点 (N) 每个 GROUP BY time() 时间间隔。对于 大多数 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)
| 时间 | 样本 |
|---|
| 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 |
请注意,前两行是从第一个时间间隔随机选择的点,后两行是从第二个时间间隔随机选择的点。
顶部函数()
返回最大的 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(field_key,N)
返回与字段键相关联的最大的N个字段值。
TOP(field_key,tag_key(s),N)
返回标签键的N个标签值的最大字段值。
TOP(field_key,N),tag_key(s),field_key(s)
返回与括号中的字段键关联的最大的N个字段值,以及相关的 tag 和/或 field。
TOP() 支持 int64 和 float64 字段值 数据类型。
注意: TOP() 返回时间戳最早的字段值,如果存在两个或更多值的最大值相同的情况。
示例
选择与字段键相关的前三个字段值
返回 water_level 字段键中和 h2o_feet 测量中的三个最大值。
SELECT TOP("water_level",3) FROM "h2o_feet"
| 时间 | 顶部 |
|---|
| 2019-08-28T07:18:00Z | 9.957 |
| 2019-08-28T07:24:00Z | 9.964 |
| 2019-08-28T07:30:00Z | 9.954 |
选择与字段键关联的前三个字段值并包含多个子句
返回每个24分钟间隔内water_level字段的最大三个值,时间范围是2019-08-18T00:00:00Z到2019-08-18T00:54:00Z,结果按降序时间戳排列。
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
| 时间 | 顶部 | 位置 |
|---|
| 2019-08-18T00:54:00Z | 6.982 | coyote_creek |
| 2019-08-18T00:54:00Z | 2.054 | 圣塔莫尼卡 |
| 2019-08-18T00:48:00Z | 7.110 | coyote_creek |
| 2019-08-18T00:36:00Z | 7.372 | 郊狼溪 |
| 2019-08-18T00:30:00Z | 7.500 | 土狼溪 |
| 2019-08-18T00:24:00Z | 7.635 | coyote_creek |
| 2019-08-18T00:12:00Z | 7.887 | 狼獾溪 |
| 2019-08-18T00:06:00Z | 8.005 | coyote_creek |
| 2019-08-18T00:00:00Z | 8.120 | 郊狼溪 |
请注意,GROUP BY time() 子句 不会覆盖数据点的原始时间戳。有关该行为的更详细解释,请参阅下面部分的 问题 1。
关于 TOP() 的常见问题
TOP() 带有 GROUP BY time() 子句
带有 TOP() 和 GROUP BY time() 子句的查询返回指定数量的点 per 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)
| 时间 | 顶部 |
|---|
| 2019年08月18日T00: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 个点。
示例
下面的查询请求三个标签值的water_level的最大字段值,标签键为location。因为location标签键有两个标签值(santa_monica和coyote_creek),所以查询返回两个点而不是三个。
SELECT TOP("water_level","location",3) FROM "h2o_feet"
| 时间 | 顶部 | 位置 |
|---|
| 2019-08-29T03:54:00Z | 7.205 | 圣塔莫尼卡 |
| 2019-08-29T07:24:00Z | 9.964 | 小狼溪 |