文档文档

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

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2