OFFSET及SOFFSET子句
OFFSET
和SOFFSET
分别标记数据点和序列返回的位置。
OFFSET子句
OFFSET <N>
表示从查询结果中的第N
个数据点开始返回。
语法
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] LIMIT_clause OFFSET <N> [SLIMIT_clause]
语法描述
N
表示从第N
个数据点开始返回。使用OFFSET
子句需要先使用LIMIT
子句,在没有LIMIT
子句的情况下使用OFFSET
子句,可能会导致出现不一致的查询结果。
注释:如果
WHERE
子句包含时间范围,TSDB For InfluxDB®将不会返回任何结果,OFFSET
子句可能会导致TSDB For InfluxDB®返回时间戳不在该时间范围内的数据点。
示例
标记数据点返回的位置
> SELECT "water_level","location" FROM "h2o_feet" LIMIT 3 OFFSET 3
name: h2o_feet
time water_level location
---- ----------- --------
2015-08-18T00:06:00Z 2.116 santa_monica
2015-08-18T00:12:00Z 7.887 coyote_creek
2015-08-18T00:12:00Z 2.028 santa_monica
该查询从measurement h2o_feet
中返回第四、第五和第六个数据点。如果以上查询语句中没有使用OFFSET 3
,那么查询将返回该measurement的第一、第二和第三个数据点。
标记数据点返回的位置并且包含多个子句
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) ORDER BY time DESC LIMIT 2 OFFSET 2 SLIMIT 1
name: h2o_feet
tags: location=coyote_creek
time mean
---- ----
2015-08-18T00:12:00Z 7.8245
2015-08-18T00:00:00Z 8.0625
这个例子非常复杂,所以我们逐个子句来分析:
SELECT
子句指定了一个InfluxQL函数;FROM
子句指定了measurement;WHERE
子句指定了查询的时间范围;GROUP BY
子句将查询结果按所有tag(*
)和12分钟的时间间隔进行分组;ORDER BY time DESC
子句按递减的时间顺序返回结果;LIMIT 2
子句将返回的数据点个数限制为2;OFFSET 2
子句使查询结果的前两个平均值不返回;SLIMIT 1
子句将返回的序列个数限制为1。
如果以上查询语句中没有使用OFFSET 2
,那么查询将返回结果中的前两个平均值:
name: h2o_feet
tags: location=coyote_creek
time mean
---- ----
2015-08-18T00:36:00Z 7.303
2015-08-18T00:24:00Z 7.5675
SOFFSET子句
SOFFSET <N>
表示从查询结果中的第N
个序列开始返回。
语法
SELECT_clause [INTO_clause] FROM_clause [WHERE_clause] GROUP BY *[,time(time_interval)] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] SLIMIT_clause SOFFSET <N>
语法描述
N
表示从第N
个序列开始返回。使用SOFFSET
子句需要先使用SLIMIT
子句,在没有SLIMIT
子句的情况下使用SOFFSET
子句,可能会导致出现不一致的查询结果。
注释:如果
N
大于序列的个数,TSDB For InfluxDB®将不会返回任何结果。
示例
标记序列返回的位置
> SELECT "water_level" FROM "h2o_feet" GROUP BY * SLIMIT 1 SOFFSET 1
name: h2o_feet
tags: location=santa_monica
time water_level
---- -----------
2015-08-18T00:00:00Z 2.064
2015-08-18T00:06:00Z 2.116
[...]
2015-09-18T21:36:00Z 5.066
2015-09-18T21:42:00Z 4.938
该查询返回measurement为h2o_feet
、tag为location = santa_monica
的序列中的数据。如果以上查询语句中没有使用SOFFSET 1
,那么查询将返回measurement为h2o_feet
、tag为location = coyote_creek
的序列中的数据。
标记序列返回的位置并且包含多个子句
> SELECT MEAN("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:42:00Z' GROUP BY *,time(12m) ORDER BY time DESC LIMIT 2 OFFSET 2 SLIMIT 1 SOFFSET 1
name: h2o_feet
tags: location=santa_monica
time mean
---- ----
2015-08-18T00:12:00Z 2.077
2015-08-18T00:00:00Z 2.09
这个例子非常复杂,所以我们逐个子句来分析:
SELECT
子句指定了一个InfluxQL函数;FROM
子句指定了measurement;WHERE
子句指定了查询的时间范围;GROUP BY
子句将查询结果按所有tag(*
)和12分钟的时间间隔进行分组;ORDER BY time DESC
子句按递减的时间顺序返回结果;LIMIT 2
子句将返回的数据点个数限制为2;OFFSET 2
子句使查询结果的前两个平均值不返回;SLIMIT 1
子句将返回的序列个数限制为1;SOFFSET 1
子句使查询结果中第一个序列的数据不返回。
如果以上查询语句中没有使用SOFFSET 1
,那么查询将返回另外一个序列的结果:
name: h2o_feet
tags: location=coyote_creek
time mean
---- ----
2015-08-18T00:12:00Z 7.8245
2015-08-18T00:00:00Z 8.0625
InfluxDB® is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB®.