OFFSET及SOFFSET子句

更新时间:

OFFSETSOFFSET分别标记数据点和序列返回的位置。

OFFSET子句

OFFSET <N>表示从查询结果中的第N个数据点开始返回。

语法

  1. 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®返回时间戳不在该时间范围内的数据点。

示例

标记数据点返回的位置

  1. > SELECT "water_level","location" FROM "h2o_feet" LIMIT 3 OFFSET 3
  2. name: h2o_feet
  3. time water_level location
  4. ---- ----------- --------
  5. 2015-08-18T00:06:00Z 2.116 santa_monica
  6. 2015-08-18T00:12:00Z 7.887 coyote_creek
  7. 2015-08-18T00:12:00Z 2.028 santa_monica

该查询从measurement h2o_feet中返回第四、第五和第六个数据点。如果以上查询语句中没有使用OFFSET 3,那么查询将返回该measurement的第一、第二和第三个数据点。

标记数据点返回的位置并且包含多个子句

  1. > 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
  2. name: h2o_feet
  3. tags: location=coyote_creek
  4. time mean
  5. ---- ----
  6. 2015-08-18T00:12:00Z 7.8245
  7. 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,那么查询将返回结果中的前两个平均值:

  1. name: h2o_feet
  2. tags: location=coyote_creek
  3. time mean
  4. ---- ----
  5. 2015-08-18T00:36:00Z 7.303
  6. 2015-08-18T00:24:00Z 7.5675

SOFFSET子句

SOFFSET <N>表示从查询结果中的第N个序列开始返回。

语法

  1. 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®将不会返回任何结果。

示例

标记序列返回的位置

  1. > SELECT "water_level" FROM "h2o_feet" GROUP BY * SLIMIT 1 SOFFSET 1
  2. name: h2o_feet
  3. tags: location=santa_monica
  4. time water_level
  5. ---- -----------
  6. 2015-08-18T00:00:00Z 2.064
  7. 2015-08-18T00:06:00Z 2.116
  8. [...]
  9. 2015-09-18T21:36:00Z 5.066
  10. 2015-09-18T21:42:00Z 4.938

该查询返回measurement为h2o_feet、tag为location = santa_monica的序列中的数据。如果以上查询语句中没有使用SOFFSET 1,那么查询将返回measurement为h2o_feet、tag为location = coyote_creek的序列中的数据。

标记序列返回的位置并且包含多个子句

  1. > 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
  2. name: h2o_feet
  3. tags: location=santa_monica
  4. time mean
  5. ---- ----
  6. 2015-08-18T00:12:00Z 2.077
  7. 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,那么查询将返回另外一个序列的结果:

  1. name: h2o_feet
  2. tags: location=coyote_creek
  3. time mean
  4. ---- ----
  5. 2015-08-18T00:12:00Z 7.8245
  6. 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®.