文档文档

填充数据缺失

date_bin_gapfillinterpolatelocf 结合使用,以填充未返回数据的空缺时间段。空缺填充 SQL 查询通过使用插值后的值填充空缺,或通过向前推移最后一个可用观测值来处理时间序列数据中的缺失数据。

填充数据中的空缺

  1. 使用 date_bin_gapfill 函数将数据按时间分组,并为每个分组应用一个 聚合函数。如果某个分组中不存在数据,date_bin_gapfill 会插入一个新行,其中包含该分组的起始时间戳,GROUP BY 子句中所有列的值,以及查询字段的 null 值。

  2. 使用 interpolatelocf 来填充指定列中插入的 null 值。

    • interpolate:通过对非 null 值之间的值进行插值来填充 null 值。
    • locf:通过向前推移最后一个观测值来填充 null 值。

    传递给 interpolatelocf 的表达式必须使用 聚合函数

  3. 包含一个设置时间上限和下限的 WHERE 子句。例如:

WHERE time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T10:00:00Z'

填充数据中空缺的示例

以下示例使用 Home sensor sample data 来展示如何使用 date_bin_gapfill 以及 interplatelocf 的不同结果。

SELECT
  date_bin_gapfill(INTERVAL '30 minutes', time) as time,
  room,
  interpolate(avg(temp))
FROM home
WHERE
    time >= '2022-01-01T08:00:00Z'
    AND time <= '2022-01-01T10:00:00Z'
GROUP BY 1, room
timeroomAVG(home.temp)
2022-01-01T08:00:00Z厨房21
2022-01-01T08:30:00Z厨房22
2022-01-01T09:00:00Z厨房23
2022-01-01T09:30:00Z厨房22.85
2022-01-01T10:00:00Z厨房22.7
2022-01-01T08:00:00Z客厅21.1
2022-01-01T08:30:00Z客厅21.25
2022-01-01T09:00:00Z客厅21.4
2022-01-01T09:30:00Z客厅21.6
2022-01-01T10:00:00Z客厅21.8
SELECT
  date_bin_gapfill(INTERVAL '30 minutes', time) as time,
  room,
  locf(avg(temp))
FROM home
WHERE
    time >= '2022-01-01T08:00:00Z'
    AND time <= '2022-01-01T10:00:00Z'
GROUP BY 1, room
timeroomAVG(home.temp)
2022-01-01T08:00:00Z厨房21
2022-01-01T08:30:00Z厨房21
2022-01-01T09:00:00Z厨房23
2022-01-01T09:30:00Z厨房23
2022-01-01T10:00:00Z厨房22.7
2022-01-01T08:00:00Z客厅21.1
2022-01-01T08:30:00Z客厅21.1
2022-01-01T09:00:00Z客厅21.4
2022-01-01T09:30:00Z客厅21.4
2022-01-01T10:00:00Z客厅21.8

此页面是否有帮助?

感谢您的反馈!


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