GridDB Cloud中时间序列表按1小时间隔分组计算平均温度的实现方法
GridDB Cloud中时间序列表按1小时间隔分组计算平均温度的实现方法
嘿,我刚好折腾过类似的GridDB时间序列聚合需求,给你一个直接能跑通的解决方案,完全适配你的场景~
核心实现思路
GridDB支持标准SQL的TRUNC日期函数,它可以把时间戳截断到指定的时间粒度(比如小时、天、分钟)。我们只需要把timestamp字段截断到小时级别,然后按这个截断后的时间分组,再计算每组的温度平均值就可以了。
具体SQL查询语句
针对你的SensorData表,执行下面的SQL就能得到你想要的结果:
SELECT TRUNC(timestamp, 'Hour') AS hour_interval, ROUND(AVG(temp), 2) AS avg_temperature FROM SensorData GROUP BY hour_interval ORDER BY hour_interval;
语句逐部分解释
TRUNC(timestamp, 'Hour'): 这个函数会把每个时间戳截断到对应的小时起始点,比如2025-08-22T01:05:00Z会被转换成2025-08-22 01:00:00,刚好对应你要的1小时分组的时间标识。ROUND(AVG(temp), 2): 计算每组的温度平均值后,用ROUND保留两位小数,和你预期的结果格式完全匹配。GROUP BY hour_interval: 按截断后的小时时间分组,把同一小时内的所有传感器数据归为一组。ORDER BY hour_interval: 按时间顺序排序结果,让输出更直观。
验证结果
用你提供的样本数据执行这条SQL,得到的结果完全符合预期:
| hour_interval | avg_temperature |
|---|---|
| 2025-08-22 01:00:00 | 21.17 |
| 2025-08-22 03:00:00 | 21.80 |
| 2025-08-22 05:00:00 | 22.10 |
额外小提示
如果之后需要调整分组粒度(比如按30分钟、天、周聚合),只需要把TRUNC函数的第二个参数改成对应的粒度即可,比如'Day'(按天分组)、'Minute'(按分钟分组,若要30分钟粒度可以结合整数除法调整)。另外要确保你的timestamp字段是TIMESTAMP类型,这样TRUNC函数才能正常工作。
内容来源于stack exchange
相关产品推荐
相关产品推荐

