填补数据中的空白
使用 date_bin_gapfill
与 interpolate
或 locf 来
填补没有返回数据的时间间隔的空白。
填补空白的 SQL 查询通过用插值填充
缺失数据的时间序列数据的空白,或通过向前填充最后一个可用观测值。
填补数据中的空白:
使用date_bin_gapfill函数将您的数据分组成基于时间的组,并对每个窗口应用聚合函数。如果在某个窗口中没有数据,date_bin_gapfill将插入一行新数据,该行具有窗口的起始时间戳,GROUP BY子句中的所有列已填充,并且查询字段的值为null。
使用 interpolate 或 locf 来填充指定列中插入的空值。
- interpolate: 通过对非空值之间的插值填充空值。
- locf: 通过向前填充最后观察到的值来填充空值.
传递给 interpolate 或 locf 的表达式必须使用
聚合函数。
包含一个 WHERE 子句,用于设置上限和下限时间界限。
例如:
WHERE time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T10:00:00Z'
填补数据空白的示例
以下示例使用在
开始使用InfluxDB教程
中提供的示例数据集来展示如何使用 date_bin_gapfill 以及 interplate 和 locf 的不同结果。
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 _time, room
| 时间 | 房间 | 平均(家里温度) |
|---|
| 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 _time, room
| 时间 | 房间 | 平均(家里温度) |
|---|
| 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 |