influxDB選擇類函數


1)TOP()函數

作用:返回一個字段中最大的N個值,字段類型必須是長整型或float64類型。

語法:

SELECT TOP(<field_key>[,<tag_keys>],<N>)[,<tag_keys>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
選擇3個water_level最大值
SELECT TOP(water_level,3) FROM h2o_feet
結果
name: h2o_feet
--------------
time			   top
2015-08-29T07:18:00Z	 9.957
2015-08-29T07:24:00Z	 9.964
2015-08-29T07:30:00Z	 9.954

例子2
選擇3個water_level最大值,並在輸出中包含相關的location標記:
SELECT TOP(water_level,3),location FROM h2o_feet
結果
name: h2o_feet
--------------
time			   top	   location
2015-08-29T07:18:00Z	 9.957	 coyote_creek
2015-08-29T07:24:00Z	 9.964	 coyote_creek
2015-08-29T07:30:00Z	 9.954	 coyote_creek
例子3
選擇在2個location標簽的最大值
SELECT TOP(water_level,location,2) FROM h2o_feet
結果
name: h2o_feet
--------------
time			   top	   location
2015-08-29T03:54:00Z	 7.205	 santa_monica
2015-08-29T07:24:00Z	 9.964	 coyote_creek
輸出顯示的位置每個標簽值water_level最高值(santa_monica和coyote_creek)。
注:查詢語法SELECT TOP(<field_key>,<tag_key>,<N>),標簽在哪里有X的不同的值,返回n或x字段的值,以較小者為准,並返回的每個點有一個獨特的標簽值。要演示這種行為,請參見上面示例查詢的結果,其中n等於3,n等於1。
  • N = 3
SELECT TOP(water_level,location,3) FROM h2o_feet
結果
name: h2o_feet -------------- time top location 2015-08-29T03:54:00Z 7.205 santa_monica 2015-08-29T07:24:00Z 9.964 coyote_creek
返回兩個值而不是三InfluxDB因為位置標簽只有兩個值(santa_monica和coyote_creek)。
  • N = 1
SELECT TOP(water_level,location,1) FROM h2o_feet
結果
name: h2o_feet
--------------
time			  top	   location
2015-08-29T07:24:00Z	 9.964	 coyote_creek
比較water_level InfluxDB頂值在每個標簽的位置值並返回water_level的較大值。

例子4
選擇最大water_level 2個值,范圍2015年8月18日 4點與2015年8月18日4點18分,范圍每個location標簽
SELECT TOP(water_level,2) FROM h2o_feet WHERE time >= '2015-08-18T04:00:00Z' AND time < '2015-08-18T04:24:00Z' GROUP BY location
結果
name: h2o_feet
tags: location=coyote_creek
time			  top
----			               ---
2015-08-18T04:00:00Z	 2.943
2015-08-18T04:06:00Z	 2.831


name: h2o_feet
tags: location=santa_monica
time			   top
----			               ---
2015-08-18T04:06:00Z	 4.055
2015-08-18T04:18:00Z	 4.124

例子5
選擇wtaer_level最大的2個值,在范圍2015年8月18日 4點與2015年8月18日4點18分,location為santa_monica
SELECT TOP(water_level,2) FROM h2o_feet WHERE time >= '2015-08-18T04:00:00Z' AND time < '2015-08-18T04:24:00Z' AND location = 'santa_monica'
name: h2o_feet
--------------
time			  top
2015-08-18T04:06:00Z	 4.055
2015-08-18T04:18:00Z	 4.124


值得注意的是原始數據,water_level等於4.055在2015-08-18t04:06:00z和2015-08-18t04:12:00z。在相同的情況下,InfluxDB返回值更早的那個時間戳。

2、BOTTOM()函數

作用:返回一個字段中最小的N個值。字段類型必須是長整型或float64類型。

語法:

SELECT BOTTOM(<field_key>[,<tag_keys>],<N>)[,<tag_keys>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
選擇三個最小值
SELECT BOTTOM(water_level,3) FROM h2o_feet
結果
name: h2o_feet
--------------
time			 bottom
2015-08-29T14:30:00Z	 -0.61
2015-08-29T14:36:00Z	 -0.591
2015-08-30T15:18:00Z	 -0.594

例子2
選擇三個最小值,在輸出中包含相關的location標簽:
SELECT BOTTOM(water_level,3),location FROM h2o_feet
name: h2o_feet
--------------
time			bottom	 location
2015-08-29T14:30:00Z	 -0.61	  coyote_creek
2015-08-29T14:36:00Z	 -0.591	 coyote_creek
2015-08-30T15:18:00Z	 -0.594	 coyote_creek

例子3
選擇2個location最小值
SELECT BOTTOM(water_level,location,2) FROM h2o_feet

結果
name: h2o_feet
--------------
time			 bottom	 location
2015-08-29T10:36:00Z	 -0.243	 santa_monica
2015-08-29T14:30:00Z	 -0.61	  coyote_creek

輸出顯示的位置每個標簽值water_level底值(santa_monica和coyote_creek)。
注:查詢語法select(< field_key >,< tag_key >,<n>),標簽在哪里有X的不同的值,返回n或x字段的值,以較小者為准,並返回的每個點有一個獨特的標簽值。要演示這種行為,請參見上面示例查詢的結果,其中n等於3,n等於1。

N = 3
SELECT BOTTOM(water_level,location,3) FROM h2o_feet
結果
name: h2o_feet
--------------
time			bottom	 location
2015-08-29T10:36:00Z	 -0.243	 santa_monica
2015-08-29T14:30:00Z	 -0.61	  coyote_creek
 返回兩個值而不是三InfluxDB因為位置標簽只有兩個值(santa_monica和coyote_creek)。
  • N = 1
SELECT BOTTOM(water_level,location,1) FROM h2o_feet
結果
name: h2o_feet
--------------
time			bottom	 location
2015-08-29T14:30:00Z	 -0.61	  coyote_creek
InfluxDB比較water_level底值在每個標簽的位置值並返回water_level值越小。

例子4
每個location標簽選擇兩個最小值 ,范圍在2015年8月18日4點和2015年8月18日4點18分。
SELECT BOTTOM(water_level,2) FROM h2o_feet WHERE time >= '2015-08-18T04:00:00Z' AND time < '2015-08-18T04:24:00Z' GROUP BY location

name: h2o_feet
tags: location=coyote_creek
time			 bottom
----			------
2015-08-18T04:12:00Z	 2.717
2015-08-18T04:18:00Z	 2.625


name: h2o_feet
tags: location=santa_monica
time			  bottom
----			------
2015-08-18T04:00:00Z	 3.911
2015-08-18T04:06:00Z	 4.055

例子5
選擇最小的兩個值,在2015年8月18日4點和2015年8月18日4點18分,location為santa_monica

SELECT BOTTOM(water_level,2) FROM h2o_feet WHERE time >= '2015-08-18T04:00:00Z' AND time < '2015-08-18T04:24:00Z' AND location = 'santa_monica'
結果
name: h2o_feet -------------- time bottom 2015-08-18T04:00:00Z 3.911 2015-08-18T04:06:00Z 4.055
值得注意的是原始數據,water_level等於4.055在2015-08-18t04:06:00z和2015-08-18t04:12:00z。在相同的情況下,InfluxDB返回值更早的那個時間戳。

3)FIRST()函數

作用:返回一個字段中最老的取值。

語法:

SELECT FIRST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
選擇locaction 為santa_monica,water_level最老的值
SELECT FIRST(water_level) FROM h2o_feet WHERE location = 'santa_monica'
結果
name: h2o_feet
--------------
time			 first
2015-08-18T00:00:00Z	 2.064
例子2
選擇最老的water_level,2015-08-18T00:42:00Z 與 2015-08-18T00:54:00Z之間,並輸出location tag
SELECT FIRST(water_level),location FROM h2o_feet WHERE time >= '2015-08-18T00:42:00Z' and time <= '2015-08-18T00:54:00Z'
結果
name: h2o_feet
--------------
time			 first	 location
2015-08-18T00:42:00Z	 7.234	 coyote_creek

例子3
選擇最老的water_level,以location分組
SELECT FIRST(water_level) FROM h2o_feet GROUP BY location
結果
name: h2o_feet
tags: location = coyote_creek
time			 first
----			-----
2015-08-18T00:00:00Z	 8.12

name: h2o_feet
tags: location = santa_monica
time			first
----			-----
2015-08-18T00:00:00Z	 2.064

4)LAST()函數

作用:返回一個字段中最新的取值。

語法:

SELECT LAST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
以location為santa_monica為條件,選擇最新的water_level
SELECT LAST(water_level) FROM h2o_feet WHERE location = 'santa_monica'
結果
name: h2o_feet
--------------
time			 last
2015-09-18T21:42:00Z	 4.938

例子2
2015-08-18T00:42:00Z 與 2015-08-18T00:54:00Z之間,選擇最新的water_level,並輸出location tag
SELECT LAST(water_level),location FROM h2o_feet WHERE time >= '2015-08-18T00:42:00Z' and time <= '2015-08-18T00:54:00Z'
結果
name: h2o_feet
--------------
time			 last	  location
2015-08-18T00:54:00Z	 6.982	 coyote_creek
例子2
選擇最新的water_level,以location分組
SELECT LAST(water_level) FROM h2o_feet GROUP BY location
結果
name: h2o_feet
tags: location = coyote_creek
time			 last
----			 ----
2015-09-18T16:24:00Z	 3.235

name: h2o_feet
tags: location = santa_monica
time			 last
----			 ----
2015-09-18T21:42:00Z	 4.938
Note: LAST() does not return points that occur after now() unless the WHERE clause specifies that time range. See Frequently Encountered Issues for how to query after now().

5)MAX()函數

作用:返回一個字段中的最大值。該字段類型必須是長整型,float64,或布爾類型。

語法:

SELECT MAX(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
選擇表h2o_feet中最大的值water_level
SELECT MAX(water_level) FROM h2o_feet
結果
name: h2o_feet
--------------
time			  max
2015-08-29T07:24:00Z	 9.964
例子2
選擇表h2o_feet中最大的值water_level,並輸出location tag
SELECT MAX(water_level),location FROM h2o_feet
結果
name: h2o_feet
--------------
time			 max	   location
2015-08-29T07:24:00Z	 9.964	 coyote_creek
例子3
每12分選擇表h2o_feet中每個location最大的值water_level,指定的時間范圍
SELECT MAX(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' AND time < '2015-08-18T00:54:00Z' GROUP BY time(12m), location
name: h2o_feet
tags: location = coyote_creek
time			 max
----		  	 ---
2015-08-18T00:00:00Z	  8.12
2015-08-18T00:12:00Z	  7.887
2015-08-18T00:24:00Z	  7.635
2015-08-18T00:36:00Z	  7.372
2015-08-18T00:48:00Z	  7.11

name: h2o_feet
tags: location = santa_monica
time			 max
----		  	---
2015-08-18T00:00:00Z	  2.116
2015-08-18T00:12:00Z	  2.126
2015-08-18T00:24:00Z	  2.051
2015-08-18T00:36:00Z	  2.067
2015-08-18T00:48:00Z	  1.991

6)MIN()函數

作用:返回一個字段中的最小值。該字段類型必須是長整型,float64,或布爾類型。

語法:

SELECT MIN(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
選擇表h2o_feet中最小的值water_level
SELECT MIN(water_level) FROM h2o_feet
結果
name: h2o_feet
--------------
time			  min
2015-08-29T14:30:00Z	 -0.61
例子2
選擇表h2o_feet中最小的值water_level,並輸出location tag
SELECT MIN(water_level),location FROM h2o_feet
結果
name: h2o_feet
--------------
time			min	   location
2015-08-29T14:30:00Z	-0.61	 coyote_creek
例子3
每12分選擇表h2o_feet中每個location最小的值water_level,指定的時間范圍
SELECT MIN(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' AND time < '2015-08-18T00:54:00Z' GROUP BY time(12m), location
結果
name: h2o_feet
tags: location = coyote_creek
time			  min
----			  ---
2015-08-18T00:00:00Z	   8.005
2015-08-18T00:12:00Z	   7.762
2015-08-18T00:24:00Z	   7.5
2015-08-18T00:36:00Z	   7.234
2015-08-18T00:48:00Z	   7.11

name: h2o_feet
tags: location = santa_monica
time			    min
----			    ---
2015-08-18T00:00:00Z	   2.064
2015-08-18T00:12:00Z	   2.028
2015-08-18T00:24:00Z	   2.041
2015-08-18T00:36:00Z	   2.057
2015-08-18T00:48:00Z	   1.991

7)PERCENTILE()函數

作用:返回排序值排位為N的百分值。字段的類型必須是長整型或float64。

百分值是介於100到0之間的整數或浮點數,包括100。

語法:

SELECT PERCENTILE(<field_key>, <N>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
計算location為coyote_creek,排位為5%的water_level值。
 SELECT PERCENTILE(water_level,5) FROM h2o_feet WHERE location = 'coyote_creek'
結果
: h2o_feet
--------------
time		       percentile
2015-09-09T11:42:00Z	 1.148
解釋:
就是將water_level字段按照不同的location求百分比,然后取第五位數據。
值1.148大於5%的位置的值(The value 1.148 is larger than 5% of the values in water_level where location equals coyote_creek.)
例子2
計算location為coyote_creek,排位為5%的water_level值,並輸出location tag。
SELECT PERCENTILE(water_level,5),location FROM h2o_feet
結果
name: h2o_feet
--------------
time	                  percentile	 location
2015-08-28T12:06:00Z	  1.122		 santa_monica
例子2
計算以location分組,排在100%的值
SELECT PERCENTILE(water_level, 100) FROM h2o_feet GROUP BY location
結果
name: h2o_feet
tags: location = coyote_creek
time			 percentile
----			  ----------
2015-08-29T07:24:00Z	 9.964

name: h2o_feet
tags: location = santa_monica
time			 percentile
----			 ----------
2015-08-29T03:54:00Z	 7.205
注意:PERCENTILE(<field_key>,100)相當於MAX(<field_key>)
目前,PERCENTILE(<field_key>,0)不相當於MIN(<field_key>)
注意,PERCENTILE(<field_key>, 50)接近於MEDIAN(),MEDIAN()如果是偶婁個則返回中間兩個值的平均值
詳細資料可參考官網:https://docs.influxdata.com/influxdb/v1.3/query_language/functions
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM