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 3name: h2o_feettime water_level location---- ----------- --------2015-08-18T00:06:00Z 2.116 santa_monica2015-08-18T00:12:00Z 7.887 coyote_creek2015-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 1name: h2o_feettags: location=coyote_creektime mean---- ----2015-08-18T00:12:00Z 7.82452015-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_feettags: location=coyote_creektime mean---- ----2015-08-18T00:36:00Z 7.3032015-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 1name: h2o_feettags: location=santa_monicatime water_level---- -----------2015-08-18T00:00:00Z 2.0642015-08-18T00:06:00Z 2.116[...]2015-09-18T21:36:00Z 5.0662015-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 1name: h2o_feettags: location=santa_monicatime mean---- ----2015-08-18T00:12:00Z 2.0772015-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_feettags: location=coyote_creektime mean---- ----2015-08-18T00:12:00Z 7.82452015-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®.