Documentation

InfluxQL 子查询

InfluxQL 子查询是在 InfluxQL 查询的 FROM 子句中嵌套的查询。外部查询查询由内部查询(子查询)返回的结果。

InfluxQL 不支持 HAVING 子句,但 InfluxQL 子查询提供了类似于 SQL HAVING 子句 的功能。

语法

SELECT_clause FROM ( SELECT_statement ) [...]

在使用子查询时,InfluxQL 首先执行内部查询,然后执行外部查询。

外部查询需要一个 SELECT 子句 和一个 FROM 子句。内部查询被包含在外部查询的 FROM 子句中的括号内。

InfluxQL 支持多个嵌套的子查询:

SELECT_clause FROM ( SELECT_clause FROM ( SELECT_statement ) [...] ) [...]

示例

示例数据

下面的示例使用以下样本数据集:

对聚合结果集应用聚合函数

计算两个字段之间的平均差异

根据阈值过滤汇总值

对聚合值执行附加聚合操作

显著的子查询行为

对外部查询应用时间限制以提高性能

要提高使用子查询和指定时间范围的InfluxQL查询的性能,请将WHERE子句与基于时间的谓词应用于外部查询,而不是内部查询。例如,以下查询返回相同的结果,但在外部查询中使用基于时间的谓词的查询比在内部查询中使用基于时间的谓词的查询性能更高

外部查询的时间限制

SELECT
  inner_value AS value
FROM
  (
    SELECT
      raw_value as inner_value
  )
WHERE
  time >= '2022-01-01T08:00:00Z'
  AND time <= '2022-01-01T20:00:00Z'

内部查询的时间范围

SELECT
  inner_value AS value
FROM
  (
    SELECT
      raw_value as inner_value
    WHERE
      time >= '2022-07-19T08:00:00Z'
      AND time <= '2022-01-01T20:00:00Z'
  )

不能在子查询中使用多个 SELECT 语句

InfluxQL 不支持每个子查询的多个 SELECT 语句:

SELECT_clause FROM (SELECT_statement; SELECT_statement) [...]

然而,InfluxQL确实支持每个外部查询的多个嵌套子查询:

SELECT_clause FROM ( SELECT_clause FROM ( SELECT_statement ) [...] ) [...]
                     ------------------   ----------------
                         Subquery 1          Subquery 2


Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: