文档文档

InfluxQL 子查询

InfluxDB 3 Core 处于公开 Alpha 阶段

InfluxDB 3 Core 处于公开 alpha 阶段,可用于测试和反馈,但不适用于生产环境。产品和此文档都在不断完善中。我们欢迎并鼓励您提供关于 alpha 体验的意见,并邀请您加入我们的公共频道以获取更新和分享反馈。

Alpha 预期和建议

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 开源版本现已可用于 alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 alpha 版本的一部分。

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

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