【问题标题】:Find average value for each hour interval in a certain time period查找特定时间段内每个小时间隔的平均值
【发布时间】:2021-08-22 00:25:46
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: mysql sql druid pydruid


    【解决方案1】:

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

    基本上,这会将VALUEGROUP BY 中删除。

    【讨论】:

    • 戈登,你太棒了。你不知道我尝试了多少不同的变化来使它起作用。似乎您的版本可以按我的意愿工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2020-03-02
    • 2022-01-08
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多