【问题标题】:How to find the highest temperature recorded on each day如何找到每天记录的最高温度
【发布时间】:2020-01-21 11:45:37
【问题描述】:

我正在研究 InfluxDb,并且有一个时间序列数据记录某个位置的温度。在这里我必须找到每天的最高温度和时间戳。

任务是:

  • 以 1 小时为单位计算平均温度。
  • 然后从上述平均值中找出每天的最高温度。

我已经写了一个查询,但我没有得到所需的输出。

SELECT MAX(mean)
FROM (SELECT mean("value")
        FROM "temperature"
        WHERE ("location" = 'L1')
        GROUP BY time(1h))
    GROUP BY time(1d)

我得到的输出是:

time                 max 
----                 ---      
2020-01-17T00:00:00Z 573.44
2020-01-16T00:00:00Z 674.44

这里将时间戳记为 00:00:00z -01-17T13:00:00Z

【问题讨论】:

  • 顺便说一句:您的查询未找到每日最大价值。它仅从每小时平均值中找到最大值。
  • SELECT max("value") FROM "temperature" WHERE ("location" = 'L1') GROUP BY time(1d) 。还是我错过了什么
  • @JanGaraj 我已经更新了这个问题。抱歉弄错了

标签: influxdb


【解决方案1】:

目前没有。

GROUP BY 有效地删除了每个条目的时间戳。就像分组间隔(例如当天)的所有数据都被放入没有时间戳的存储桶中。存储桶有一个时间戳 - 间隔的开始。

结果只有GROUP BY 间隔开始的时间戳。

执行此操作的唯一方法是在应用程序中,而不是后端。您可能想尝试一下;如果您只需要解析到例如最近 5 分钟,使用GROUP BY time(5m) 进行查询。这样做可以缩小客户端检索的数据大小与后端处理时间的关系。

【讨论】:

  • 感谢杰森的回复。很清楚 group by 子句将如何在 influxDb 中工作,但 group by 5m 并不能解决我的要求,因为我必须找到每天的高峰时间。
  • 如果您只需要 1 小时的分辨率,那么使用您的内部查询来获取数据并处理它可能是有意义的,即SELECT mean("value") FROM "temperature" WHERE ("location" = 'L1') GROUP BY time(1h)。这会显着减少您的数据传输以及应用负载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2011-06-16
  • 1970-01-01
  • 2019-08-08
  • 2016-09-05
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多