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

时间:2021-06-03 21:35:12

标签: mysql sql druid pydruid

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

我正在尝试编写能够为我提供每小时平均值的代码(例如,不是给我下午 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”函数,但出现错误。

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯。 . .我不熟悉所有函数,但您似乎想要 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