函数

InfluxDB的函数可以分成Aggregate,select和predict类型。

Aggregations

COUNT()

返回非空字段值得数目

语法

  1. SELECT COUNT( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

嵌套语法

  1. SELECT COUNT(DISTINCT( [ * | <field_key> | /<regular_expression>/ ] )) [...]

语法描述

COUNT(field_key)

返回field key对应的field values的数目。

COUNT(/regular_expression/)

返回匹配正则表达式的field key对应的field values的数目。

COUNT(*)

返回measurement中的每个field key对应的field value的数目。

COUNT()支持所有数据类型的field value,InfluxQL支持COUNT()嵌套DISTINCT()

例子

例一:计数指定field key的field value的数目
  1. > SELECT COUNT("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time count
  4. ---- -----
  5. 1970-01-01T00:00:00Z 15258

该查询返回measurementh2o_feet中的water_level的非空字段值的数量。

例二:计数measurement中每个field key关联的field value的数量
  1. > SELECT COUNT(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time count_level description count_water_level
  4. ---- ----------------------- -----------------
  5. 1970-01-01T00:00:00Z 15258 15258

该查询返回与measurementh2o_feet相关联的每个字段键的非空字段值的数量。h2o_feet有两个字段键:level_descriptionwater_level

例三:计数匹配一个正则表达式的每个field key关联的field value的数目
  1. > SELECT COUNT(/water/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time count_water_level
  4. ---- -----------------
  5. 1970-01-01T00:00:00Z 15258

该查询返回measurementh2o_feet中包含water单词的每个field key的非空字段值的数量。

例四:计数包括多个子句的field key的field value的数目
  1. > SELECT COUNT("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(200) LIMIT 7 SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time count
  5. ---- -----
  6. 2015-08-17T23:48:00Z 200
  7. 2015-08-18T00:00:00Z 2
  8. 2015-08-18T00:12:00Z 2
  9. 2015-08-18T00:24:00Z 2
  10. 2015-08-18T00:36:00Z 2
  11. 2015-08-18T00:48:00Z 2

该查询返回water_level字段键中的非空字段值的数量。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果分组为12分钟的时间间隔和每个tag。并用200填充空的时间间隔,并将点数返回7measurement返回1。

例五:计数一个field key的distinct的field value的数量
  1. > SELECT COUNT(DISTINCT("level description")) FROM "h2o_feet"
  2. name: h2o_feet
  3. time count
  4. ---- -----
  5. 1970-01-01T00:00:00Z 4

查询返回measurement为h2o_feetfield key为level description的唯一field value的数量。

COUNT()的常见问题

问题一:COUNT()和fill()

大多数InfluxQL函数对于没有数据的时间间隔返回null值,fill(<fill_option>)将该null值替换为fill_optionCOUNT()针对没有数据的时间间隔返回0fill(<fill_option>)fill_option替换0值。

例如

下面的代码块中的第一个查询不包括fill()。最后一个时间间隔没有数据,因此该时间间隔的值返回为零。第二个查询包括fill(800000); 它将最后一个间隔中的零替换为800000。

  1. > SELECT COUNT("water_level") FROM "h2o_feet" WHERE time >= '2015-09-18T21:24:00Z' AND time <= '2015-09-18T21:54:00Z' GROUP BY time(12m)
  2. name: h2o_feet
  3. time count
  4. ---- -----
  5. 2015-09-18T21:24:00Z 2
  6. 2015-09-18T21:36:00Z 2
  7. 2015-09-18T21:48:00Z 0
  8. > SELECT COUNT("water_level") FROM "h2o_feet" WHERE time >= '2015-09-18T21:24:00Z' AND time <= '2015-09-18T21:54:00Z' GROUP BY time(12m) fill(800000)
  9. name: h2o_feet
  10. time count
  11. ---- -----
  12. 2015-09-18T21:24:00Z 2
  13. 2015-09-18T21:36:00Z 2
  14. 2015-09-18T21:48:00Z 800000

DISTINCT()

返回field value的不同值列表。

语法

  1. SELECT DISTINCT( [ * | <field_key> | /<regular_expression>/ ] ) FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

嵌套语法

  1. SELECT COUNT(DISTINCT( [ * | <field_key> | /<regular_expression>/ ] )) [...]

语法描述

DISTINCT(field_key)

返回field key对应的不同field values。

DISTINCT(/regular_expression/)

返回匹配正则表达式的field key对应的不同field values。

DISTINCT(*)

返回measurement中的每个field key对应的不同field value。

DISTINCT()支持所有数据类型的field value,InfluxQL支持COUNT()嵌套DISTINCT()

例子

例一:列出一个field key的不同的field value
  1. > SELECT DISTINCT("level description") FROM "h2o_feet"
  2. name: h2o_feet
  3. time distinct
  4. ---- --------
  5. 1970-01-01T00:00:00Z between 6 and 9 feet
  6. 1970-01-01T00:00:00Z below 3 feet
  7. 1970-01-01T00:00:00Z between 3 and 6 feet
  8. 1970-01-01T00:00:00Z at or greater than 9 feet

查询返回level description的所有的不同的值。

例二:列出一个measurement中每个field key的不同值
  1. > SELECT DISTINCT(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time distinct_level description distinct_water_level
  4. ---- -------------------------- --------------------
  5. 1970-01-01T00:00:00Z between 6 and 9 feet 8.12
  6. 1970-01-01T00:00:00Z between 3 and 6 feet 8.005
  7. 1970-01-01T00:00:00Z at or greater than 9 feet 7.887
  8. 1970-01-01T00:00:00Z below 3 feet 7.762
  9. [...]

查询返回h2o_feet中每个字段的唯一字段值的列表。h2o_feet有两个字段:descriptionwater_level

例三:列出匹配正则表达式的field的不同field value
  1. > SELECT DISTINCT(/description/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time distinct_level description
  4. ---- --------------------------
  5. 1970-01-01T00:00:00Z below 3 feet
  6. 1970-01-01T00:00:00Z between 6 and 9 feet
  7. 1970-01-01T00:00:00Z between 3 and 6 feet
  8. 1970-01-01T00:00:00Z at or greater than 9 feet

查询返回h2o_feet中含有description的字段的唯一字段值的列表。

例四:列出包含多个子句的field key关联的不同值得列表
  1. > SELECT DISTINCT("level description") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time distinct
  5. ---- --------
  6. 2015-08-18T00:00:00Z between 6 and 9 feet
  7. 2015-08-18T00:12:00Z between 6 and 9 feet
  8. 2015-08-18T00:24:00Z between 6 and 9 feet
  9. 2015-08-18T00:36:00Z between 6 and 9 feet
  10. 2015-08-18T00:48:00Z between 6 and 9 feet

该查询返回level description字段键中不同字段值的列表。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。查询限制返回一个series。

例五:对一个字段的不同值作计数
  1. > SELECT COUNT(DISTINCT("level description")) FROM "h2o_feet"
  2. name: h2o_feet
  3. time count
  4. ---- -----
  5. 1970-01-01T00:00:00Z 4

查询返回h2o_feet这个measurement中字段level description的不同值的数目。

DISTINCT()的常见问题

问题一:DISTINCT()和INTO子句

使用DISTINCT()INTO子句可能导致InfluxDB覆盖目标measurement中的点。DISTINCT()通常返回多个具有相同时间戳的结果; InfluxDB假设具有相同series的点,时间戳是重复的点,并且仅覆盖目的measurement中最近一个点的任何重复点。

例如

下面的代码中的第一个查询使用DISTINCT()函数,返回四个结果。请注意,每个结果具有相同的时间戳。第二个查询将INTO子句添加到初始查询中,并将查询结果写入measurementdistincts中。代码中的最后一个查询选择distincts中的所有数据。最后一个查询返回一个点,因为四个初始结果是重复点; 它们属于同一series,具有相同的时间戳。 当系统遇到重复点时,它会用最近一个点覆盖上一个点。

  1. > SELECT DISTINCT("level description") FROM "h2o_feet"
  2. name: h2o_feet
  3. time distinct
  4. ---- --------
  5. 1970-01-01T00:00:00Z below 3 feet
  6. 1970-01-01T00:00:00Z between 6 and 9 feet
  7. 1970-01-01T00:00:00Z between 3 and 6 feet
  8. 1970-01-01T00:00:00Z at or greater than 9 feet
  9. > SELECT DISTINCT("level description") INTO "distincts" FROM "h2o_feet"
  10. name: result
  11. time written
  12. ---- -------
  13. 1970-01-01T00:00:00Z 4
  14. > SELECT * FROM "distincts"
  15. name: distincts
  16. time distinct
  17. ---- --------
  18. 1970-01-01T00:00:00Z at or greater than 9 feet

INTEGRAL()

返回字段曲线下的面积,即是积分。

语法

  1. SELECT INTEGRAL( [ * | <field_key> | /<regular_expression>/ ] [ , <unit> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

语法描述

InfluxDB计算字段曲线下的面积,并将这些结果转换为每unit的总和面积。unit参数是一个整数,后跟一个时间字符串,它是可选的。如果查询未指定单位,则单位默认为1秒(1s)。

INTEGRAL(field_key)

返回field key关联的值之下的面积。

INTEGRAL(/regular_expression/)

返回满足正则表达式的每个field key关联的值之下的面积。

INTEGRAL(*)

返回measurement中每个field key关联的值之下的面积。

INTEGRAL()不支持fill()INTEGRAL()支持int64和float64两个数据类型。

例子

下面的五个例子,使用数据库NOAA_water_database中的数据:

  1. > SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time water_level
  4. ---- -----------
  5. 2015-08-18T00:00:00Z 2.064
  6. 2015-08-18T00:06:00Z 2.116
  7. 2015-08-18T00:12:00Z 2.028
  8. 2015-08-18T00:18:00Z 2.126
  9. 2015-08-18T00:24:00Z 2.041
  10. 2015-08-18T00:30:00Z 2.051
例一:计算指定的field key的值得积分
  1. > SELECT INTEGRAL("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time integral
  4. ---- --------
  5. 1970-01-01T00:00:00Z 3732.66

该查询返回h2o_feet中的字段water_level的曲线下的面积(以秒为单位)。

例二:计算指定的field key和时间单位的值得积分
  1. > SELECT INTEGRAL("water_level",1m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time integral
  4. ---- --------
  5. 1970-01-01T00:00:00Z 62.211

该查询返回h2o_feet中的字段water_level的曲线下的面积(以分钟为单位)。

例三:计算measurement中每个field key在指定时间单位的值得积分
  1. > SELECT INTEGRAL(*,1m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time integral_water_level
  4. ---- --------------------
  5. 1970-01-01T00:00:00Z 62.211

查询返回measurementh2o_feet中存储的每个数值字段相关的字段值的曲线下面积(以分钟为单位)。 h2o_feet的数值字段为water_level

例四:计算measurement中匹配正则表达式的field key在指定时间单位的值得积分
  1. > SELECT INTEGRAL(/water/,1m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time integral_water_level
  4. ---- --------------------
  5. 1970-01-0

查询返回field key包括单词water的每个数值类型的字段相关联的字段值的曲线下的区域(以分钟为单位)。

例五:在含有多个子句中计算指定字段的积分
  1. > SELECT INTEGRAL("water_level",1m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m) LIMIT 1
  2. name: h2o_feet
  3. time integral
  4. ---- --------
  5. 2015-08-18T00:00:00Z 24.972

查询返回与字段water_level相关联的字段值的曲线下面积(以分钟为单位)。 它涵盖2015-08-18T00:00:00Z2015-08-18T00:30:00Z之间的时间段,分组结果间隔12分钟,并将结果数量限制为1。

MEAN()

返回字段的平均值

语法

  1. SELECT MEAN( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

语法描述

MEAN(field_key)

返回field key关联的值的平均值。

MEAN(/regular_expression/)

返回满足正则表达式的每个field key关联的值的平均值。

MEAN(*)

返回measurement中每个field key关联的值的平均值。

MEAN()支持int64和float64两个数据类型。

例子

例一:计算指定字段的平均值
  1. > SELECT MEAN("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time mean
  4. ---- ----
  5. 1970-01-01T00:00:00Z 4.442107025822522

该查询返回measurementh2o_feet的字段water_level的平均值。

例二:计算measurement中每个字段的平均值
  1. > SELECT MEAN(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time mean_water_level
  4. ---- ----------------
  5. 1970-01-01T00:00:00Z 4.442107025822522

查询返回在h2o_feet中数值类型的每个字段的平均值。h2o_feet有一个数值字段:water_level

例三:计算满足正则表达式的字段的平均值
  1. > SELECT MEAN(/water/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time mean_water_level
  4. ---- ----------------
  5. 1970-01-01T00:00:00Z 4.442107025822523

查询返回在h2o_feet中字段中含有water的数值类型字段的平均值。

例四:计算含有多个子句字段的平均值
  1. > SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 7 SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time mean
  5. ---- ----
  6. 2015-08-17T23:48:00Z 9.01
  7. 2015-08-18T00:00:00Z 8.0625
  8. 2015-08-18T00:12:00Z 7.8245
  9. 2015-08-18T00:24:00Z 7.5675
  10. 2015-08-18T00:36:00Z 7.303
  11. 2015-08-18T00:48:00Z 7.046

查询返回字段water_level中的值的平均值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。该查询用9.01填充空时间间隔,并将点数和series分别限制到7和1。

MEDIAN()

返回排好序的字段的中位数。

语法

  1. SELECT MEDIAN( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

语法描述

MEDIAN(field_key)

返回field key关联的值的中位数。

MEDIAN(/regular_expression/)

返回满足正则表达式的每个field key关联的值的中位数。

MEDIAN(*)

返回measurement中每个field key关联的值的中位数。

MEDIAN()支持int64和float64两个数据类型。

注意:MEDIAN()近似于PERCENTILE(field_key,50),除了如果该字段包含偶数个值,MEDIAN()返回两个中间字段值的平均值之外。

例子

例一:计算指定字段的中位数
  1. > SELECT MEDIAN("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time median
  4. ---- ------
  5. 1970-01-01T00:00:00Z 4.124

该查询返回measurementh2o_feet的字段water_level的中位数。

例二:计算measurement中每个字段的中位数
  1. > SELECT MEDIAN(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time median_water_level
  4. ---- ------------------
  5. 1970-01-01T00:00:00Z 4.124

查询返回在h2o_feet中数值类型的每个字段的中位数。h2o_feet有一个数值字段:water_level

例三:计算满足正则表达式的字段的中位数
  1. > SELECT MEDIAN(/water/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time median_water_level
  4. ---- ------------------
  5. 1970-01-01T00:00:00Z 4.124

查询返回在h2o_feet中字段中含有water的数值类型字段的中位数。

例四:计算含有多个子句字段的中位数
  1. > SELECT MEDIAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(700) LIMIT 7 SLIMIT 1 SOFFSET 1
  2. name: h2o_feet
  3. tags: location=santa_monica
  4. time median
  5. ---- ------
  6. 2015-08-17T23:48:00Z 700
  7. 2015-08-18T00:00:00Z 2.09
  8. 2015-08-18T00:12:00Z 2.077
  9. 2015-08-18T00:24:00Z 2.0460000000000003
  10. 2015-08-18T00:36:00Z 2.0620000000000003
  11. 2015-08-18T00:48:00Z 700

查询返回字段water_level中的值的中位数。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。该查询用700填充空时间间隔,并将点数和series分别限制到7和1,并将series的返回偏移1。

MODE()

返回字段中出现频率最高的值。

语法

  1. SELECT MODE( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

语法描述

MODE(field_key)

返回field key关联的值的出现频率最高的值。

MODE(/regular_expression/)

返回满足正则表达式的每个field key关联的值的出现频率最高的值。

MODE(*)

返回measurement中每个field key关联的值的出现频率最高的值。

MODE()支持所有数据类型。

注意:MODE()如果最多出现次数有两个或多个值,则返回具有最早时间戳的字段值。

例子

例一:计算指定字段的最常出现的值
  1. > SELECT MODE("level description") FROM "h2o_feet"
  2. name: h2o_feet
  3. time mode
  4. ---- ----
  5. 1970-01-01T00:00:00Z between 3 and 6 feet

该查询返回measurementh2o_feet的字段level description的最常出现的值。

例二:计算measurement中每个字段最常出现的值
  1. > SELECT MODE(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time mode_level description mode_water_level
  4. ---- ---------------------- ----------------
  5. 1970-01-01T00:00:00Z between 3 and 6 feet 2.69

查询返回在h2o_feet中数值类型的每个字段的最常出现的值。h2o_feet有两个字段:water_levellevel description

例三:计算满足正则表达式的字段的最常出现的值
  1. > SELECT MODE(/water/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time mode_water_level
  4. ---- ----------------
  5. 1970-01-01T00:00:00Z 2.69

查询返回在h2o_feet中字段中含有water的字段的最常出现的值。

例四:计算含有多个子句字段的最常出现的值
  1. > SELECT MODE("level description") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* LIMIT 3 SLIMIT 1 SOFFSET 1
  2. name: h2o_feet
  3. tags: location=santa_monica
  4. time mode
  5. ---- ----
  6. 2015-08-17T23:48:00Z
  7. 2015-08-18T00:00:00Z below 3 feet
  8. 2015-08-18T00:12:00Z below 3 feet

查询返回字段water_level中的值的最常出现的值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。,并将点数和series分别限制到3和1,并将series的返回偏移1。

SPREAD()

返回字段中最大和最小值的差值。

语法

  1. SELECT SPREAD( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

语法描述

SPREAD(field_key)

返回field key最大和最小值的差值。

SPREAD(/regular_expression/)

返回满足正则表达式的每个field key最大和最小值的差值。

SPREAD(*)

返回measurement中每个field key最大和最小值的差值。

SPREAD()支持所有的数值类型的field。

例子

例一:计算指定字段最大和最小值的差值
  1. > SELECT SPREAD("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time spread
  4. ---- ------
  5. 1970-01-01T00:00:00Z 10.574

该查询返回measurementh2o_feet的字段water_level的最大和最小值的差值。

例二:计算measurement中每个字段最大和最小值的差值
  1. > SELECT SPREAD(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time spread_water_level
  4. ---- ------------------
  5. 1970-01-01T00:00:00Z 10.574

查询返回在h2o_feet中数值类型的每个数值字段的最大和最小值的差值。h2o_feet有一个数值字段:water_level

例三:计算满足正则表达式的字段最大和最小值的差值
  1. > SELECT SPREAD(/water/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time spread_water_level
  4. ---- ------------------
  5. 1970-01-01T00:00:00Z 10.574

查询返回在h2o_feet中字段中含有water的所有数值字段的最大和最小值的差值。

例四:计算含有多个子句字段最大和最小值的差值
  1. > SELECT SPREAD("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(18) LIMIT 3 SLIMIT 1 SOFFSET 1
  2. name: h2o_feet
  3. tags: location=santa_monica
  4. time spread
  5. ---- ------
  6. 2015-08-17T23:48:00Z 18
  7. 2015-08-18T00:00:00Z 0.052000000000000046
  8. 2015-08-18T00:12:00Z 0.09799999999999986

查询返回字段water_level中的最大和最小值的差值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组,空值用18来填充,并将点数和series分别限制到3和1,并将series的返回偏移1。

STDDEV()

返回字段的标准差。

语法

  1. SELECT STDDEV( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

语法描述

STDDEV(field_key)

返回field key的标准差。

STDDEV(/regular_expression/)

返回满足正则表达式的每个field key的标准差。

STDDEV(*)

返回measurement中每个field key的标准差。

STDDEV()支持所有的数值类型的field。

例子

例一:计算指定字段的标准差
  1. > SELECT STDDEV("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time stddev
  4. ---- ------
  5. 1970-01-01T00:00:00Z 2.279144584196141

该查询返回measurementh2o_feet的字段water_level的标准差。

例二:计算measurement中每个字段的标准差
  1. > SELECT STDDEV(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time stddev_water_level
  4. ---- ------------------
  5. 1970-01-01T00:00:00Z 2.279144584196141

查询返回在h2o_feet中数值类型的每个数值字段的标准差。h2o_feet有一个数值字段:water_level

例三:计算满足正则表达式的字段的标准差
  1. > SELECT STDDEV(/water/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time stddev_water_level
  4. ---- ------------------
  5. 1970-01-01T00:00:00Z 2.279144584196141

查询返回在h2o_feet中字段中含有water的所有数值字段的标准差。

例四:计算含有多个子句字段的标准差
  1. > SELECT STDDEV("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(18000) LIMIT 2 SLIMIT 1 SOFFSET 1
  2. name: h2o_feet
  3. tags: location=santa_monica
  4. time stddev
  5. ---- ------
  6. 2015-08-17T23:48:00Z 18000
  7. 2015-08-18T00:00:00Z 0.03676955262170051

查询返回字段water_level的标准差。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组,空值用18000来填充,并将点数和series分别限制到2和1,并将series的返回偏移1。

SUM()

返回字段值的和。

语法

  1. SELECT SUM( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

语法描述

SUM(field_key)

返回field key的值的和。

SUM(/regular_expression/)

返回满足正则表达式的每个field key的值的和。

SUM(*)

返回measurement中每个field key的值的和。

SUM()支持所有的数值类型的field。

例子

例一:计算指定字段的值的和
  1. > SELECT SUM("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time sum
  4. ---- ---
  5. 1970-01-01T00:00:00Z 67777.66900000004

该查询返回measurementh2o_feet的字段water_level的值的和。

例二:计算measurement中每个字段的值的和
  1. > SELECT SUM(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time sum_water_level
  4. ---- ---------------
  5. 1970-01-01T00:00:00Z 67777.66900000004

查询返回在h2o_feet中数值类型的每个数值字段的值的和。h2o_feet有一个数值字段:water_level

例三:计算满足正则表达式的字段的值的和
  1. > SELECT SUM(/water/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time sum_water_level
  4. ---- ---------------
  5. 1970-01-01T00:00:00Z 67777.66900000004

查询返回在h2o_feet中字段中含有water的所有数值字段的值的和。

例四:计算含有多个子句字段的值的和
  1. > SELECT SUM("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(18000) LIMIT 4 SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time sum
  5. ---- ---
  6. 2015-08-17T23:48:00Z 18000
  7. 2015-08-18T00:00:00Z 16.125
  8. 2015-08-18T00:12:00Z 15.649
  9. 2015-08-18T00:24:00Z 15.135

查询返回字段water_level的值的和。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组,空值用18000来填充,并将点数和series分别限制到2和1,并将series的返回偏移1。

Selectors

BOTTOM()

返回最小的N个field值。

语法

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

语法描述

BOTTOM(field_key,N)

返回field key的最小的N个field value。

BOTTOM(field_key,tag_key(s),N)

返回某个tag key的N个tag value的最小的field value。

BOTTOM(field_key,N),tag_key(s),field_key(s)

返回括号里的字段的最小N个field value,以及相关的tag或field,或者两者都有。

BOTTOM()支持所有的数值类型的field。

说明:

  • 如果一个field有两个或多个相等的field value,BOTTOM()返回时间戳最早的那个。
  • BOTTOM()INTO子句一起使用的时候,和其他的函数有些不一样。

例子

例一:选择一个field的最小的三个值
  1. > SELECT BOTTOM("water_level",3) FROM "h2o_feet"
  2. name: h2o_feet
  3. time bottom
  4. ---- ------
  5. 2015-08-29T14:30:00Z -0.61
  6. 2015-08-29T14:36:00Z -0.591
  7. 2015-08-30T15:18:00Z -0.594

该查询返回measurementh2o_feet的字段water_level的最小的三个值。

例二:选择一个field的两个tag的分别最小的值
  1. > SELECT BOTTOM("water_level","location",2) FROM "h2o_feet"
  2. name: h2o_feet
  3. time bottom location
  4. ---- ------ --------
  5. 2015-08-29T10:36:00Z -0.243 santa_monica
  6. 2015-08-29T14:30:00Z -0.61 coyote_creek

该查询返回和taglocation相关的两个tag值的字段water_level的分别最小值。

例三:选择一个field的最小的四个值,以及其关联的tag和field
  1. > SELECT BOTTOM("water_level",4),"location","level description" FROM "h2o_feet"
  2. name: h2o_feet
  3. time bottom location level description
  4. ---- ------ -------- -----------------
  5. 2015-08-29T14:24:00Z -0.587 coyote_creek below 3 feet
  6. 2015-08-29T14:30:00Z -0.61 coyote_creek below 3 feet
  7. 2015-08-29T14:36:00Z -0.591 coyote_creek below 3 feet
  8. 2015-08-30T15:18:00Z -0.594 coyote_creek below 3 feet

查询返回water_level中最小的四个字段值以及taglocation和fieldlevel description的相关值。

例四:选择一个field的最小的三个值,并且包括了多个子句
  1. > SELECT BOTTOM("water_level",3),"location" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(24m) ORDER BY time DESC
  2. name: h2o_feet
  3. time bottom location
  4. ---- ------ --------
  5. 2015-08-18T00:48:00Z 1.991 santa_monica
  6. 2015-08-18T00:54:00Z 2.054 santa_monica
  7. 2015-08-18T00:54:00Z 6.982 coyote_creek
  8. 2015-08-18T00:24:00Z 2.041 santa_monica
  9. 2015-08-18T00:30:00Z 2.051 santa_monica
  10. 2015-08-18T00:42:00Z 2.057 santa_monica
  11. 2015-08-18T00:00:00Z 2.064 santa_monica
  12. 2015-08-18T00:06:00Z 2.116 santa_monica
  13. 2015-08-18T00:12:00Z 2.028 santa_monica

查询将返回在2015-08-18T00:00:00Z2015-08-18T00:54:00Z之间的每24分钟间隔内,water_level最小的三个值。它还以降序的时间戳顺序返回结果。

请注意,GROUP BY time()子句不会覆盖点的原始时间戳。有关该行为的更详细解释,请参阅下面的问题一。

BOTTOM()的常见问题

问题一:BOTTOM()GROUP BY time()子句

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

例如

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

  1. > SELECT BOTTOM("water_level",2) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(18m)
  2. name: h2o_feet
  3. time bottom
  4. ---- ------
  5. __
  6. 2015-08-18T00:00:00Z 2.064 |
  7. 2015-08-18T00:12:00Z 2.028 | <------- Smallest points for the first time interval
  8. --
  9. __
  10. 2015-08-18T00:24:00Z 2.041 |
  11. 2015-08-18T00:30:00Z 2.051 | <------- Smallest points for the second time interval
  12. --
问题二:BOTTOM()和一个少于N个值得tag key

使用语法SELECT BOTTOM(<field_key>,<tag_key>,<N>)的查询可以返回比预期少的点。如果tag具有X标签值,则查询指定N个值,当X小于N,则查询返回X点。

例如

下面的查询将要求taglocation的三个值的water_level的最小字段值。由于location具有两个值(santa_monicacoyote_creek),所以查询返回两点而不是三个。

  1. > SELECT BOTTOM("water_level","location",3) FROM "h2o_feet"
  2. name: h2o_feet
  3. time bottom location
  4. ---- ------ --------
  5. 2015-08-29T10:36:00Z -0.243 santa_monica
  6. 2015-08-29T14:30:00Z -0.61 coyote_creek
问题三:BOTTOM(),tags和INTO子句

当与INTO子句和GROUP BY tag子句结合使用时,大多数InfluxQL函数将初始数据中的任何tag转换为新写入的数据中的field。此行为也适用于BOTTOM()函数,除非BOTTOM()包含一个tag key作为参数:BOTTOM(field_key,tag_key(s),N)。在这些情况下,系统将指定的tag作为新写入的数据中的tag。

例如

下面的代码块中的第一个查询返回与tag location相关联的两个tag value的fieldwater_level中最小的字段值。它也将这些结果写入measurementbottom_water_levels。 第二个查询显示InfluxDB在bottom_water_levels中将location保存为tag。

  1. > SELECT BOTTOM("water_level","location",2) INTO "bottom_water_levels" FROM "h2o_feet"
  2. name: result
  3. time written
  4. ---- -------
  5. 1970-01-01T00:00:00Z 2
  6. > SHOW TAG KEYS FROM "bottom_water_levels"
  7. name: bottom_water_levels
  8. tagKey
  9. ------
  10. location

FIRST()

返回时间戳最早的值

语法

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

语法描述

FIRST(field_key)

返回field key时间戳最早的值。

FIRST(/regular_expression/)

返回满足正则表达式的每个field key的时间戳最早的值。

FIRST(*)

返回measurement中每个field key的时间戳最早的值。

FIRST(field_key),tag_key(s),field_key(s)

返回括号里的字段的时间戳最早的值,以及相关联的tag或field,或者两者都有。

FIRST()支持所有类型的field。

例子

例一:返回field key时间戳最早的值
  1. > SELECT FIRST("level description") FROM "h2o_feet"
  2. name: h2o_feet
  3. time first
  4. ---- -----
  5. 2015-08-18T00:00:00Z between 6 and 9 feet

查询返回level description的时间戳最早的值。

例二:列出一个measurement中每个field key的时间戳最早的值
  1. > SELECT FIRST(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time first_level description first_water_level
  4. ---- ----------------------- -----------------
  5. 1970-01-01T00:00:00Z between 6 and 9 feet 8.12

查询返回h2o_feet中每个字段的时间戳最早的值。h2o_feet有两个字段:level descriptionwater_level

例三:列出匹配正则表达式的field的时间戳最早的值
  1. > SELECT FIRST(/level/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time first_level description first_water_level
  4. ---- ----------------------- -----------------
  5. 1970-01-01T00:00:00Z between 6 and 9 feet 8.12

查询返回h2o_feet中含有level的字段的时间戳最早的值。

例四:返回field的最早的值,以及其相关的tag和field
  1. > SELECT FIRST("level description"),"location","water_level" FROM "h2o_feet"
  2. name: h2o_feet
  3. time first location water_level
  4. ---- ----- -------- -----------
  5. 2015-08-18T00:00:00Z between 6 and 9 feet coyote_creek 8.12

查询返回level description的时间戳最早的值,以及其相关的taglocation和fieldwater_level

例五:列出包含多个子句的field key的时间戳最早的值
  1. > SELECT FIRST("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time first
  5. ---- -----
  6. 2015-08-17T23:48:00Z 9.01
  7. 2015-08-18T00:00:00Z 8.12
  8. 2015-08-18T00:12:00Z 7.887
  9. 2015-08-18T00:24:00Z 7.635

查询返回字段water_level中最早的字段值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。查询用9.01填充空时间间隔,并将点数和measurement限制到4和1。

请注意,GROUP BY time()子句覆盖点的原始时间戳。结果中的时间戳表示每12分钟时间间隔的开始; 结果的第一点涵盖2015-08-17T23:48:00Z2015-08-18T00:00:00Z之间的时间间隔,结果的最后一点涵盖2015-08-18T00:24:00Z2015-08-18T00:36:00Z之间的间隔。

LAST()

返回时间戳最近的值

语法

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

语法描述

LAST(field_key)

返回field key时间戳最近的值。

LAST(/regular_expression/)

返回满足正则表达式的每个field key的时间戳最近的值。

LAST(*)

返回measurement中每个field key的时间戳最近的值。

LAST(field_key),tag_key(s),field_key(s)

返回括号里的字段的时间戳最近的值,以及相关联的tag或field,或者两者都有。

LAST()支持所有类型的field。

例子

例一:返回field key时间戳最近的值
  1. > SELECT LAST("level description") FROM "h2o_feet"
  2. name: h2o_feet
  3. time last
  4. ---- ----
  5. 2015-09-18T21:42:00Z between 3 and 6 feet

查询返回level description的时间戳最近的值。

例二:列出一个measurement中每个field key的时间戳最近的值
  1. > SELECT LAST(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time first_level description first_water_level
  4. ---- ----------------------- -----------------
  5. 1970-01-01T00:00:00Z between 3 and 6 feet 4.938

查询返回h2o_feet中每个字段的时间戳最近的值。h2o_feet有两个字段:level descriptionwater_level

例三:列出匹配正则表达式的field的时间戳最近的值
  1. > SELECT LAST(/level/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time first_level description first_water_level
  4. ---- ----------------------- -----------------
  5. 1970-01-01T00:00:00Z between 3 and 6 feet 4.938

查询返回h2o_feet中含有level的字段的时间戳最近的值。

例四:返回field的最近的值,以及其相关的tag和field
  1. > SELECT LAST("level description"),"location","water_level" FROM "h2o_feet"
  2. name: h2o_feet
  3. time last location water_level
  4. ---- ---- -------- -----------
  5. 2015-09-18T21:42:00Z between 3 and 6 feet santa_monica 4.938

查询返回level description的时间戳最近的值,以及其相关的taglocation和fieldwater_level

例五:列出包含多个子句的field key的时间戳最近的值
  1. > SELECT LAST("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time last
  5. ---- ----
  6. 2015-08-17T23:48:00Z 9.01
  7. 2015-08-18T00:00:00Z 8.005
  8. 2015-08-18T00:12:00Z 7.762
  9. 2015-08-18T00:24:00Z 7.5

查询返回字段water_level中最近的字段值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。查询用9.01填充空时间间隔,并将点数和measurement限制到4和1。

请注意,GROUP BY time()子句覆盖点的原始时间戳。结果中的时间戳表示每12分钟时间间隔的开始; 结果的第一点涵盖2015-08-17T23:48:00Z2015-08-18T00:00:00Z之间的时间间隔,结果的最后一点涵盖2015-08-18T00:24:00Z2015-08-18T00:36:00Z之间的间隔。

MAX()

返回最大的字段值

语法

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

语法描述

MAX(field_key)

返回field key的最大值。

MAX(/regular_expression/)

返回满足正则表达式的每个field key的最大值。

MAX(*)

返回measurement中每个field key的最大值。

MAX(field_key),tag_key(s),field_key(s)

返回括号里的字段的最大值,以及相关联的tag或field,或者两者都有。

MAX()支持所有数值类型的field。

例子

例一:返回field key的最大值
  1. > SELECT MAX("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time max
  4. ---- ---
  5. 2015-08-29T07:24:00Z 9.964

查询返回water_level的最大值。

例二:列出一个measurement中每个field key的最大值
  1. > SELECT MAX(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time max_water_level
  4. ---- ---------------
  5. 2015-08-29T07:24:00Z 9.964

查询返回h2o_feet中每个字段的最大值。h2o_feet有一个数值类型的字段:water_level

例三:列出匹配正则表达式的field的最大值
  1. > SELECT MAX(/level/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time max_water_level
  4. ---- ---------------
  5. 2015-08-29T07:24:00Z 9.964

查询返回h2o_feet中含有level的数值字段的最大值。

例四:返回field的最大值,以及其相关的tag和field
  1. > SELECT MAX("water_level"),"location","level description" FROM "h2o_feet"
  2. name: h2o_feet
  3. time max location level description
  4. ---- --- -------- -----------------
  5. 2015-08-29T07:24:00Z 9.964 coyote_creek at or greater than 9 feet

查询返回water_level的最大值,以及其相关的taglocation和fieldlevel description

例五:列出包含多个子句的field key的最大值
  1. > SELECT MAX("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time max
  5. ---- ---
  6. 2015-08-17T23:48:00Z 9.01
  7. 2015-08-18T00:00:00Z 8.12
  8. 2015-08-18T00:12:00Z 7.887
  9. 2015-08-18T00:24:00Z 7.635

查询返回字段water_level的最大值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。查询用9.01填充空时间间隔,并将点数和measurement限制到4和1。

请注意,GROUP BY time()子句覆盖点的原始时间戳。结果中的时间戳表示每12分钟时间间隔的开始; 结果的第一点涵盖2015-08-17T23:48:00Z2015-08-18T00:00:00Z之间的时间间隔,结果的最后一点涵盖2015-08-18T00:24:00Z2015-08-18T00:36:00Z之间的间隔。

MIN()

返回最小的字段值

语法

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

语法描述

MIN(field_key)

返回field key的最小值。

MIN(/regular_expression/)

返回满足正则表达式的每个field key的最小值。

MIN(*)

返回measurement中每个field key的最小值。

MIN(field_key),tag_key(s),field_key(s)

返回括号里的字段的最小值,以及相关联的tag或field,或者两者都有。

MIN()支持所有数值类型的field。

例子

例一:返回field key的最小值
  1. > SELECT MIN("water_level") FROM "h2o_feet"
  2. name: h2o_feet
  3. time min
  4. ---- ---
  5. 2015-08-29T14:30:00Z -0.61

查询返回water_level的最小值。

例二:列出一个measurement中每个field key的最小值
  1. > SELECT MIN(*) FROM "h2o_feet"
  2. name: h2o_feet
  3. time min_water_level
  4. ---- ---------------
  5. 2015-08-29T14:30:00Z -0.61

查询返回h2o_feet中每个字段的最小值。h2o_feet有一个数值类型的字段:water_level

例三:列出匹配正则表达式的field的最小值
  1. > SELECT MIN(/level/) FROM "h2o_feet"
  2. name: h2o_feet
  3. time min_water_level
  4. ---- ---------------
  5. 2015-08-29T14:30:00Z -0.61

查询返回h2o_feet中含有level的数值字段的最小值。

例四:返回field的最小值,以及其相关的tag和field
  1. > SELECT MIN("water_level"),"location","level description" FROM "h2o_feet"
  2. name: h2o_feet
  3. time min location level description
  4. ---- --- -------- -----------------
  5. 2015-08-29T14:30:00Z -0.61 coyote_creek below 3 feet

查询返回water_level的最小值,以及其相关的taglocation和fieldlevel description

例五:列出包含多个子句的field key的最小值
  1. > SELECT MIN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(12m),* fill(9.01) LIMIT 4 SLIMIT 1
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time min
  5. ---- ---
  6. 2015-08-17T23:48:00Z 9.01
  7. 2015-08-18T00:00:00Z 8.005
  8. 2015-08-18T00:12:00Z 7.762
  9. 2015-08-18T00:24:00Z 7.5

查询返回字段water_level的最小值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按12分钟的时间间隔和每个tag分组。查询用9.01填充空时间间隔,并将点数和measurement限制到4和1。

请注意,GROUP BY time()子句覆盖点的原始时间戳。结果中的时间戳表示每12分钟时间间隔的开始; 结果的第一点涵盖2015-08-17T23:48:00Z2015-08-18T00:00:00Z之间的时间间隔,结果的最后一点涵盖2015-08-18T00:24:00Z2015-08-18T00:36:00Z之间的间隔。

PERCENTILE()

返回较大百分之N的字段值

语法

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

语法描述

PERCENTILE(field_key,N)

返回field key较大的百分之N的值。

PERCENTILE(/regular_expression/,N)

返回满足正则表达式的每个field key较大的百分之N的值。

PERCENTILE(*,N)

返回measurement中每个field key较大的百分之N的值。

PERCENTILE(field_key,N),tag_key(s),field_key(s)

返回括号里的字段较大的百分之N的值,以及相关联的tag或field,或者两者都有。

N必须是0到100的整数或者浮点数。

PERCENTILE()支持所有数值类型的field。

例子

例一:返回field key较大的百分之5的值
  1. > SELECT PERCENTILE("water_level",5) FROM "h2o_feet"
  2. name: h2o_feet
  3. time percentile
  4. ---- ----------
  5. 2015-08-31T03:42:00Z 1.122

查询返回water_level中值在总的field value中比较大的百分之五。

例二:列出一个measurement中每个field key较大的百分之5的值
  1. > SELECT PERCENTILE(*,5) FROM "h2o_feet"
  2. name: h2o_feet
  3. time percentile_water_level
  4. ---- ----------------------
  5. 2015-08-31T03:42:00Z 1.122

查询返回h2o_feet中每个字段中值在总的field value中比较大的百分之五。h2o_feet有一个数值类型的字段:water_level

例三:列出匹配正则表达式的field较大的百分之5的值
  1. > SELECT PERCENTILE(/level/,5) FROM "h2o_feet"
  2. name: h2o_feet
  3. time percentile_water_level
  4. ---- ----------------------
  5. 2015-08-31T03:42:00Z 1.122

查询返回h2o_feet中含有water的数值字段的较大的百分之5的值。

例四:返回field较大的百分之5的值,以及其相关的tag和field
  1. > SELECT PERCENTILE("water_level",5),"location","level description" FROM "h2o_feet"
  2. name: h2o_feet
  3. time percentile location level description
  4. ---- ---------- -------- -----------------
  5. 2015-08-31T03:42:00Z 1.122 coyote_creek below 3 feet

查询返回water_level的较大的百分之5的值,以及其相关的taglocation和fieldlevel description

例五:列出包含多个子句的field key的较大的百分之20的值
  1. > SELECT PERCENTILE("water_level",20) FROM "h2o_feet" WHERE time >= '2015-08-17T23:48:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(24m) fill(15) LIMIT 2
  2. name: h2o_feet
  3. time percentile
  4. ---- ----------
  5. 2015-08-17T23:36:00Z 15
  6. 2015-08-18T00:00:00Z 2.064

查询返回字段water_level较大的百分之20的值。它涵盖2015-08-17T23:48:00Z2015-08-18T00:54:00Z之间的时间段,并将结果按24分钟的时间间隔分组。查询用15填充空时间间隔,并将点数限制到2。

请注意,GROUP BY time()子句覆盖点的原始时间戳。结果中的时间戳表示每24分钟时间间隔的开始; 结果的第一点涵盖2015-08-17T23:36:00Z2015-08-18T00:00:00Z之间的时间间隔,结果的最后一点涵盖2015-08-18T00:00:00Z2015-08-18T00:24:00Z之间的间隔。

PERCENTILE()的常见问题

问题一:PERCENTILE()和其他函数的比较
  • 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()使用reservoir sampling来生成随机点。

语法

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

SAMPLE(field_key,N)

返回field key的N个随机抽样的字段值。

SAMPLE(/regular_expression/,N)

返回满足正则表达式的每个field key的N个随机抽样的字段值。

SAMPLE(*,N)

返回measurement中每个field key的N个随机抽样的字段值。

SAMPLE(field_key,N),tag_key(s),field_key(s)

返回括号里的字段的N个随机抽样的字段值,以及相关联的tag或field,或者两者都有。

N必须是整数。

SAMPLE()支持所有类型的field。

例子

例一:返回field key的两个随机抽样的字段值
  1. > SELECT SAMPLE("water_level",2) FROM "h2o_feet"
  2. name: h2o_feet
  3. time sample
  4. ---- ------
  5. 2015-09-09T21:48:00Z 5.659
  6. 2015-09-18T10:00:00Z 6.939

查询返回water_level的两个随机抽样的字段值。

例二:列出一个measurement中每个field key的两个随机抽样的字段值
  1. > SELECT SAMPLE(*,2) FROM "h2o_feet"
  2. name: h2o_feet
  3. time sample_level description sample_water_level
  4. ---- ------------------------ ------------------
  5. 2015-08-25T17:06:00Z 3.284
  6. 2015-09-03T04:30:00Z below 3 feet
  7. 2015-09-03T20:06:00Z between 3 and 6 feet
  8. 2015-09-08T21:54:00Z 3.412

查询返回h2o_feet中每个字段的两个随机抽样的字段值。h2o_feet有两个字段:water_levellevel description

例三:列出匹配正则表达式的field的两个随机抽样的字段值
  1. > SELECT SAMPLE(/level/,2) FROM "h2o_feet"
  2. name: h2o_feet
  3. time sample_level description sample_water_level
  4. ---- ------------------------ ------------------
  5. 2015-08-30T05:54:00Z between 6 and 9 feet
  6. 2015-09-07T01:18:00Z 7.854
  7. 2015-09-09T20:30:00Z 7.32
  8. 2015-09-13T19:18:00Z between 3 and 6 feet

查询返回h2o_feet中含有level的字段的两个随机抽样的字段值。

例四:返回field两个随机抽样的字段值,以及其相关的tag和field
  1. > SELECT SAMPLE("water_level",2),"location","level description" FROM "h2o_feet"
  2. name: h2o_feet
  3. time sample location level description
  4. ---- ------ -------- -----------------
  5. 2015-08-29T10:54:00Z 5.689 coyote_creek between 3 and 6 feet
  6. 2015-09-08T15:48:00Z 6.391 coyote_creek between 6 and 9 feet

查询返回water_level的两个随机抽样的字段值,以及其相关的taglocation和fieldlevel description

例五:列出包含多个子句的field key的一个随机抽样的字段值
  1. > SELECT SAMPLE("water_level",1) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(18m)
  2. name: h2o_feet
  3. time sample
  4. ---- ------
  5. 2015-08-18T00:12:00Z 2.028
  6. 2015-08-18T00:30:00Z 2.051

查询返回字段water_level的一个随机抽样的字段值。它涵盖2015-08-18T00:00:00Z2015-08-18T00:30:00Z之间的时间段,并将结果按18分钟的时间间隔分组。

请注意,GROUP BY time()子句没有覆盖点的原始时间戳。有关该行为的更详细解释,请参阅下面的问题一。

SAMPLE()的常见问题

问题一:SAMPLE()GROUP BY time()

使用SAMPLE()GROUP BY time()子句的查询返回每个GROUP BY time()间隔的指定点数(N)。对于大多数GROUP BY time()查询,返回的时间戳是每个GROUP BY time()间隔的开始。GROUP BY time()查询与SAMPLE()函数的行为不同; 它们保留原始数据点的时间戳。

例如

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

  1. > SELECT SAMPLE("water_level",2) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(18m)
  2. name: h2o_feet
  3. time sample
  4. ---- ------
  5. __
  6. 2015-08-18T00:06:00Z 2.116 |
  7. 2015-08-18T00:12:00Z 2.028 | <------- Randomly-selected points for the first time interval
  8. --
  9. __
  10. 2015-08-18T00:18:00Z 2.126 |
  11. 2015-08-18T00:30:00Z 2.051 | <------- Randomly-selected points for the second time interval

TOP()

返回最大的N个field值。

语法

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

语法描述

TOP(field_key,N)

返回field key的最大的N个field value。

TOP(field_key,tag_key(s),N)

返回某个tag key的N个tag value的最大的field value。

TOP(field_key,N),tag_key(s),field_key(s)

返回括号里的字段的最大N个field value,以及相关的tag或field,或者两者都有。

TOP()支持所有的数值类型的field。

说明:

  • 如果一个field有两个或多个相等的field value,TOP()返回时间戳最早的那个。
  • TOP()INTO子句一起使用的时候,和其他的函数有些不一样。

例子

例一:选择一个field的最大的三个值
  1. > SELECT TOP("water_level",3) FROM "h2o_feet"
  2. name: h2o_feet
  3. time top
  4. ---- ---
  5. 2015-08-29T07:18:00Z 9.957
  6. 2015-08-29T07:24:00Z 9.964
  7. 2015-08-29T07:30:00Z 9.954

该查询返回measurementh2o_feet的字段water_level的最大的三个值。

例二:选择一个field的两个tag的分别最大的值
  1. > SELECT TOP("water_level","location",2) FROM "h2o_feet"
  2. name: h2o_feet
  3. time top location
  4. ---- --- --------
  5. 2015-08-29T03:54:00Z 7.205 santa_monica
  6. 2015-08-29T07:24:00Z 9.964 coyote_creek

该查询返回和taglocation相关的两个tag值的字段water_level的分别最大值。

例三:选择一个field的最大的四个值,以及其关联的tag和field
  1. > SELECT TOP("water_level",4),"location","level description" FROM "h2o_feet"
  2. name: h2o_feet
  3. time top location level description
  4. ---- --- -------- -----------------
  5. 2015-08-29T07:18:00Z 9.957 coyote_creek at or greater than 9 feet
  6. 2015-08-29T07:24:00Z 9.964 coyote_creek at or greater than 9 feet
  7. 2015-08-29T07:30:00Z 9.954 coyote_creek at or greater than 9 feet
  8. 2015-08-29T07:36:00Z 9.941 coyote_creek at or greater than 9 feet

查询返回water_level中最大的四个字段值以及taglocation和fieldlevel description的相关值。

例四:选择一个field的最大的三个值,并且包括了多个子句
  1. > SELECT TOP("water_level",3),"location" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:54:00Z' GROUP BY time(24m) ORDER BY time DESC
  2. name: h2o_feet
  3. time top location
  4. ---- --- --------
  5. 2015-08-18T00:48:00Z 7.11 coyote_creek
  6. 2015-08-18T00:54:00Z 6.982 coyote_creek
  7. 2015-08-18T00:54:00Z 2.054 santa_monica
  8. 2015-08-18T00:24:00Z 7.635 coyote_creek
  9. 2015-08-18T00:30:00Z 7.5 coyote_creek
  10. 2015-08-18T00:36:00Z 7.372 coyote_creek
  11. 2015-08-18T00:00:00Z 8.12 coyote_creek
  12. 2015-08-18T00:06:00Z 8.005 coyote_creek
  13. 2015-08-18T00:12:00Z 7.887 coyote_creek

查询将返回在2015-08-18T00:00:00Z2015-08-18T00:54:00Z之间的每24分钟间隔内,water_level最大的三个值。它还以降序的时间戳顺序返回结果。

请注意,GROUP BY time()子句不会覆盖点的原始时间戳。有关该行为的更详细解释,请参阅下面的问题一。

TOP()的常见问题

问题一:TOP()GROUP BY time()子句

TOP()GROUP BY time()子句的查询返回每个GROUP BY time()间隔指定的点数。对于大多数GROUP BY time()查询,返回的时间戳被置为GROUP BY time()间隔的开始。GROUP BY time()查询与TOP()函数的行为不同; 它们保留原始数据点的时间戳。

例如

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

  1. > SELECT TOP("water_level",2) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(18m)
  2. name: h2o_feet
  3. time top
  4. ---- ------
  5. __
  6. 2015-08-18T00:00:00Z 2.064 |
  7. 2015-08-18T00:06:00Z 2.116 | <------- Greatest points for the first time interval
  8. --
  9. __
  10. 2015-08-18T00:18:00Z 2.126 |
  11. 2015-08-18T00:30:00Z 2.051 | <------- Greatest points for the second time interval
  12. --
问题二:TOP()和一个少于N个值得tag key

使用语法SELECT TOP(<field_key>,<tag_key>,<N>)的查询可以返回比预期少的点。如果tag具有X标签值,则查询指定N个值,当X小于N,则查询返回X点。

例如

下面的查询将要求taglocation的三个值的water_level的最大字段值。由于location具有两个值(santa_monicacoyote_creek),所以查询返回两点而不是三个。

  1. > SELECT TOP("water_level","location",3) FROM "h2o_feet"
  2. name: h2o_feet
  3. time top location
  4. ---- --- --------
  5. 2015-08-29T03:54:00Z 7.205 santa_monica
  6. 2015-08-29T07:24:00Z 9.964 coyote_creek
问题三:TOP(),tags和INTO子句

当与INTO子句和GROUP BY tag子句结合使用时,大多数InfluxQL函数将初始数据中的任何tag转换为新写入的数据中的field。此行为也适用于TOP()函数,除非TOP()包含一个tag key作为参数:TOP(field_key,tag_key(s),N)。在这些情况下,系统将指定的tag作为新写入的数据中的tag。

例如

下面的代码块中的第一个查询返回与tag location相关联的两个tag value的fieldwater_level中最大的字段值。它也将这些结果写入measurementtop_water_levels。 第二个查询显示InfluxDB在top_water_levels中将location保存为tag。

  1. > SELECT TOP("water_level","location",2) INTO "top_water_levels" FROM "h2o_feet"
  2. name: result
  3. time written
  4. ---- -------
  5. 1970-01-01T00:00:00Z 2
  6. > SHOW TAG KEYS FROM "top_water_levels"
  7. name: top_water_levels
  8. tagKey
  9. ------
  10. location

Transformations

CEILING()

CEILING()已经不再是一个函数了,具体请查看Issue #5930

CUMULATIVE_SUM()

返回字段实时前序字段值的和。

基本语法

  1. SELECT CUMULATIVE_SUM( [ * | <field_key> | /<regular_expression>/ ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

基本语法描述

CUMULATIVE_SUM(field_key)

返回field key实时前序字段值的和。

CUMULATIVE_SUM(/regular_expression/)

返回满足正则表达式的所有字段的实时前序字段值的和。

CUMULATIVE_SUM(*)

返回measurement的所有字段的实时前序字段值的和。

CUMULATIVE_SUM()支持所有的数值类型的field。

基本语法支持GROUP BYtags子句,但是不支持GROUP BY时间。在高级语法中,CUMULATIVE_SUM支持GROUP BY time()子句。

基本语法的例子

下面的1~4例子使用如下的数据:

  1. > SELECT "water_level" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica'
  2. name: h2o_feet
  3. time water_level
  4. ---- -----------
  5. 2015-08-18T00:00:00Z 2.064
  6. 2015-08-18T00:06:00Z 2.116
  7. 2015-08-18T00:12:00Z 2.028
  8. 2015-08-18T00:18:00Z 2.126
  9. 2015-08-18T00:24:00Z 2.041
  10. 2015-08-18T00:30:00Z 2.051
例一:计算一个字段的实时前序字段值的和。
  1. > SELECT CUMULATIVE_SUM("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica'
  2. name: h2o_feet
  3. time cumulative_sum
  4. ---- --------------
  5. 2015-08-18T00:00:00Z 2.064
  6. 2015-08-18T00:06:00Z 4.18
  7. 2015-08-18T00:12:00Z 6.208
  8. 2015-08-18T00:18:00Z 8.334
  9. 2015-08-18T00:24:00Z 10.375
  10. 2015-08-18T00:30:00Z 12.426

该查询返回measurementh2o_feet的字段water_level的实时前序字段值的和。

例二:计算measurement中每个字段的实时前序字段值的和
  1. > SELECT CUMULATIVE_SUM(*) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica'
  2. name: h2o_feet
  3. time cumulative_sum_water_level
  4. ---- --------------------------
  5. 2015-08-18T00:00:00Z 2.064
  6. 2015-08-18T00:06:00Z 4.18
  7. 2015-08-18T00:12:00Z 6.208
  8. 2015-08-18T00:18:00Z 8.334
  9. 2015-08-18T00:24:00Z 10.375
  10. 2015-08-18T00:30:00Z 12.426

该查询返回h2o_feet中每个数值类型的字段的实时前序字段值的和。h2o_feet只有一个数值类型的字段water_level

例三:计算measurement中满足正则表达式的每个字段的实时前序字段值的和。
  1. > SELECT CUMULATIVE_SUM(/water/) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica'
  2. name: h2o_feet
  3. time cumulative_sum_water_level
  4. ---- --------------------------
  5. 2015-08-18T00:00:00Z 2.064
  6. 2015-08-18T00:06:00Z 4.18
  7. 2015-08-18T00:12:00Z 6.208
  8. 2015-08-18T00:18:00Z 8.334
  9. 2015-08-18T00:24:00Z 10.375
  10. 2015-08-18T00:30:00Z 12.426

查询返回measurement中含有单词word的每个数值字段的实时前序字段值的和。

例四:计算一个字段的实时前序字段值的和,并且包括了多个子句
  1. > SELECT CUMULATIVE_SUM("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica' ORDER BY time DESC LIMIT 4 OFFSET 2
  2. name: h2o_feet
  3. time cumulative_sum
  4. ---- --------------
  5. 2015-08-18T00:18:00Z 6.218
  6. 2015-08-18T00:12:00Z 8.246
  7. 2015-08-18T00:06:00Z 10.362
  8. 2015-08-18T00:00:00Z 12.426

查询将返回在2015-08-18T00:00:00Z2015-08-18T00:30:00Z之间的实时前序字段值的和,以降序的时间戳顺序返回结果。并且限制返回的数据点为4,偏移数据点2个。

高级语法

  1. SELECT CUMULATIVE_SUM(<function>( [ * | <field_key> | /<regular_expression>/ ] )) [INTO_clause] FROM_clause [WHERE_clause] GROUP_BY_clause [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

高级语法描述

高级语法要求一个GROUP BY time()子句和一个嵌套的InfluxQL函数。查询首先计算在指定时间区间嵌套函数的结果,然后应用CUMULATIVE_SUM()函数的结果。

CUMULATIVE_SUM()支持以下嵌套函数:COUNT(), MEAN(), MEDIAN(), MODE(), SUM(), FIRST(), LAST(), MIN(), MAX(), PERCENTILE()

高级语法的例子

例一:计算平均值的cumulative和
  1. > SELECT CUMULATIVE_SUM(MEAN("water_level")) FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(12m)
  2. name: h2o_feet
  3. time cumulative_sum
  4. ---- --------------
  5. 2015-08-18T00:00:00Z 2.09
  6. 2015-08-18T00:12:00Z 4.167
  7. 2015-08-18T00:24:00Z 6.213

该查询返回每隔12分钟的water_level的平均值的实时和。

为得到这个结果,InfluxDB首先计算每隔12分钟的平均water_level值:

  1. > SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica' GROUP BY time(12m)
  2. name: h2o_feet
  3. time mean
  4. ---- ----
  5. 2015-08-18T00:00:00Z 2.09
  6. 2015-08-18T00:12:00Z 2.077
  7. 2015-08-18T00:24:00Z 2.0460000000000003

下一步,InfluxDB计算这些平均值的实时和。第二个点4.1672.092.077的和,第三个点6.2132.09,2.0772.04600000000003的和。

DERIVATIVE

返回字段的相邻两个点的变化率。

基本语法

  1. SELECT DERIVATIVE( [ * | <field_key> | /<regular_expression>/ ] [ , <unit> ] ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

基本语法描述

InfluxDB计算字段值之间的差并将结果转换为每unit变化率。unit参数是一个表示时间单位的字符,它是可选的。如果查询没有指定,则该unit默认为1秒(1s)。

DERIVATIVE(field_key)

返回field key的字段值的变化率。

DERIVATIVE(/regular_expression/)

返回满足正则表达式的所有字段的字段值的变化率。

DERIVATIVE(*)

返回measurement的所有字段的字段值的变化率。

DERIVATIVE()支持所有的数值类型的field。

基本语法支持GROUP BYtags子句,但是不支持GROUP BY时间。在高级语法中,DERIVATIVE支持GROUP BY time()子句。

基本语法的例子

下面的1~5例子使用如下的数据:

  1. > SELECT "water_level" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' AND "location" = 'santa_monica'
  2. name: h2o_feet
  3. time water_level
  4. ---- -----------
  5. 2015-08-18T00:00:00Z 2.064
  6. 2015-08-18T00:06:00Z 2.116
  7. 2015-08-18T00:12:00Z 2.028
  8. 2015-08-18T00:18:00Z 2.126
  9. 2015-08-18T00:24:00Z 2.041
  10. 2015-08-18T00:30:00Z 2.051
例一:计算一个字段的变化率
  1. > SELECT DERIVATIVE("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time derivative
  4. ---- ----------
  5. 2015-08-18T00:06:00Z 0.00014444444444444457
  6. 2015-08-18T00:12:00Z -0.00024444444444444465
  7. 2015-08-18T00:18:00Z 0.0002722222222222218
  8. 2015-08-18T00:24:00Z -0.000236111111111111
  9. 2015-08-18T00:30:00Z 2.777777777777842e-05

该查询返回measurementh2o_feet的字段water_level的每秒变化率。

第一个结果0.00014444444444444457是原始数据两个相邻字段值到每秒的变化率。InfluxDB计算字段值的变化,并且转化到每秒:

  1. (2.116 - 2.064) / (360s / 1s)
  2. -------------- ----------
  3. | |
  4. | the difference between the field values' timestamps / the default unit
  5. second field value - first field value
例二:计算一个字段的变化率并指定时间单位
  1. > SELECT DERIVATIVE("water_level",6m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time derivative
  4. ---- ----------
  5. 2015-08-18T00:06:00Z 0.052000000000000046
  6. 2015-08-18T00:12:00Z -0.08800000000000008
  7. 2015-08-18T00:18:00Z 0.09799999999999986
  8. 2015-08-18T00:24:00Z -0.08499999999999996
  9. 2015-08-18T00:30:00Z 0.010000000000000231

该查询返回measurementh2o_feet的字段water_level的每6分钟的变化率。

第一个结果0.052000000000000046是原始数据两个相邻字段值到每6分钟的变化率。InfluxDB计算字段值的变化,并且转化到每6分钟:

  1. (2.116 - 2.064) / (6m / 6m)
  2. -------------- ----------
  3. | |
  4. | the difference between the field values' timestamps / the specified unit
  5. second field value - first field value
例三:计算measurement中每个一个字段的变化率并指定时间单位
  1. > SELECT DERIVATIVE(*,3m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time derivative_water_level
  4. ---- ----------------------
  5. 2015-08-18T00:06:00Z 0.026000000000000023
  6. 2015-08-18T00:12:00Z -0.04400000000000004
  7. 2015-08-18T00:18:00Z 0.04899999999999993
  8. 2015-08-18T00:24:00Z -0.04249999999999998
  9. 2015-08-18T00:30:00Z 0.0050000000000001155

该查询返回measurementh2o_feet中每个数值字段的每3分钟的变化率。该measurement有一个数值字段:water_level

第一个结果0.026000000000000023是原始数据两个相邻字段值到每3分钟的变化率。InfluxDB计算字段值的变化,并且转化到每3分钟:

  1. (2.116 - 2.064) / (6m / 3m)
  2. -------------- ----------
  3. | |
  4. | the difference between the field values' timestamps / the specified unit
  5. second field value - first field value
例四:计算measurement中满足正则表达式每个一个字段的变化率并指定时间单位
  1. > SELECT DERIVATIVE(/water/,2m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z'
  2. name: h2o_feet
  3. time derivative_water_level
  4. ---- ----------------------
  5. 2015-08-18T00:06:00Z 0.01733333333333335
  6. 2015-08-18T00:12:00Z -0.02933333333333336
  7. 2015-08-18T00:18:00Z 0.03266666666666662
  8. 2015-08-18T00:24:00Z -0.02833333333333332
  9. 2015-08-18T00:30:00Z 0.0033333333333334103

该查询返回measurementh2o_feet中满足正则表达式的每个数值字段的每2分钟的变化率。该measurement有一个数值字段:water_level

第一个结果0.01733333333333335是原始数据两个相邻字段值到每3分钟的变化率。InfluxDB计算字段值的变化,并且转化到每2分钟:

  1. (2.116 - 2.064) / (6m / 2m)
  2. -------------- ----------
  3. | |
  4. | the difference between the field values' timestamps / the specified unit
  5. second field value - first field value
例五:计算个一个字段的变化率并包括多个子句
  1. > SELECT DERIVATIVE("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' ORDER BY time DESC LIMIT 1 OFFSET 2
  2. name: h2o_feet
  3. time derivative
  4. ---- ----------
  5. 2015-08-18T00:12:00Z -0.0002722222222222218

查询将返回在2015-08-18T00:00:00Z2015-08-18T00:30:00Z之间,water_level的每秒的变化率。它还以降序的时间戳顺序返回结果。 并且限制返回的数据点为1,偏移两个数据点

第一个结果0.0002722222222222218是原始数据两个相邻字段值到每秒的变化率。InfluxDB计算字段值的变化,并且转化到每秒:

  1. (2.126 - 2.028) / (360s / 1s)
  2. -------------- ----------
  3. | |
  4. | the difference between the field values' timestamps / the default unit
  5. second field value - first field value

高级语法

  1. SELECT DERIVATIVE(<function> ([ * | <field_key> | /<regular_expression>/ ]) [ , <unit> ] ) [INTO_clause] FROM_clause [WHERE_clause] GROUP_BY_clause [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]

高级语法的描述

高级语法要求一个GROUP BY time()子句和一个嵌套的InfluxQL函数。查询首先计算在指定时间区间嵌套函数的结果,然后应用DERIVATIVE()函数的结果。

unit参数是一个整数后面跟时间字符,该参数是可选的。如果没有指定unit,那么unit默认就是GROUP BY time()的间隔。

DERIVATIVE()支持以下嵌套函数:COUNT(), MEAN(), MEDIAN(), MODE(), SUM(), FIRST(), LAST(), MIN(), MAX(), PERCENTILE()

高级语法的例子

例一:计算一个字段平均值的变化率
  1. > SELECT DERIVATIVE(MEAN("water_level")) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)
  2. name: h2o_feet
  3. time derivative
  4. ---- ----------
  5. 2015-08-18T00:12:00Z -0.0129999999999999
  6. 2015-08-18T00:24:00Z -0.030999999999999694

该查询返回measurementh2o_feet的字段water_level的每12分钟的平均值得每12分钟的变化率。

为了得到这个结果,InfluxDB首先计算water_level每12分钟的间隔的平均值,这一步就是使用带GROUP BY time()MEAN()函数:

  1. > SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)
  2. name: h2o_feet
  3. time mean
  4. ---- ----
  5. 2015-08-18T00:00:00Z 2.09
  6. 2015-08-18T00:12:00Z 2.077
  7. 2015-08-18T00:24:00Z 2.0460000000000003

接下来,InfluxDB计算这些平均值每12分钟的变化率,第一个结果0.0129999999999999是两个相邻平均字段值到每12分钟的变化率。InfluxDB计算字段值的变化,并且转化到12分钟:

  1. (2.077 - 2.09) / (12m / 12m)
  2. ------------- ----------
  3. | |
  4. | the difference between the field values' timestamps / the default unit
  5. second field value - first field value
例二:计算一个字段平均值的变化率,并指明时间单位
  1. > SELECT DERIVATIVE(MEAN("water_level"),6m) FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)
  2. name: h2o_feet
  3. time derivative
  4. ---- ----------
  5. 2015-08-18T00:12:00Z -0.00649999999999995
  6. 2015-08-18T00:24:00Z -0.015499999999999847

该查询返回measurementh2o_feet的字段water_level的每12分钟的平均值得每6分钟的变化率。

为了得到这个结果,InfluxDB首先计算water_level每12分钟的间隔的平均值,这一步就是使用带GROUP BY time()MEAN()函数:

  1. > SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location" = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)
  2. name: h2o_feet
  3. time mean
  4. ---- ----
  5. 2015-08-18T00:00:00Z 2.09
  6. 2015-08-18T00:12:00Z 2.077
  7. 2015-08-18T00:24:00Z 2.0460000000000003

接下来,InfluxDB计算这些平均值每6分钟的变化率,第一个结果0.00649999999999995是两个相邻平均字段值到每6分钟的变化率。InfluxDB计算字段值的变化,并且转化到6分钟:

  1. (2.077 - 2.09) / (12m / 6m)
  2. ------------- ----------
  3. | |
  4. | the difference between the field values' timestamps / the specified unit
  5. second field value - first field value

DIFFERENCE