查找特定时间段内每个小时间隔的平均值

问题描述

我有一个包含以下列的数据库:时间、设备、指标、值。每分钟,此数据库都会收集相应设备/指标组合的值。

我正在尝试编写能够为我提供每小时平均值的代码(例如,不是给我下午 5-6 点的 60 个值,而是平均下午 5-6 点之间的所有值并输出 1值)。

到目前为止,我有这个代码

SELECT
  TIME_FLOOR(__time,'PT1h') AS "__time_time_floor","value",COUNT(*) AS "Count"
FROM "database"
WHERE "__time" >= CURRENT_TIMESTAMP - INTERVAL '1' DAY AND "device" = 'device_1'AND "metric"='metric_1'
GROUP BY 1,2
ORDER BY "__time_time_floor" DESC

代码每小时(下午 4、5、6 点...)输出设备/指标的值(我认为)。但是,正如我上面所说,我想要每小时间隔的平均值。不知道如何做到这一点。我尝试使用“AVG”和“SUM”函数,但出现错误

谢谢!

解决方法

嗯。 . .我不熟悉所有函数,但您似乎想要 AVG() 聚合函数:

SELECT TIME_FLOOR(__time,'PT1h') AS "__time_time_floor",AVG("value"),COUNT(*) AS "Count"
FROM "database"
WHERE "__time" >= CURRENT_TIMESTAMP - INTERVAL '1' DAY AND "device" = 'device_1'AND
      "metric"='metric_1'
GROUP BY 1
ORDER BY "__time_time_floor" DESC;

基本上,这会从 VALUE 中删除 GROUP BY