如何使用GridDB计算指定时间间隔内数据字段的平均值?
你需要通过分组聚合实现按小时统计指定字段的平均值,核心是用GROUP BY结合时间截断函数,将数据按小时维度分组后计算均值。
正确的TQL查询语句
针对你的需求(统计2022-12-27 00:00:00Z到2022-12-28 00:00:00Z之间每小时的data字段平均值),可以使用以下查询:
tql lctime SELECT DATE_TRUNC('hour', timestamp) AS hour_start, AVG(data) AS avg_data WHERE timestamp >= TIMESTAMP('2022-12-27T00:00:00Z') AND timestamp < TIMESTAMP('2022-12-28T00:00:00Z') GROUP BY DATE_TRUNC('hour', timestamp) ORDER BY hour_start;
执行后用get命令获取结果,就能得到每小时的起始时间和对应data字段的平均值。
语句说明
DATE_TRUNC('hour', timestamp):将timestamp字段截断到小时级别,作为分组依据,确保同一小时内的数据被归为一组。AVG(data):计算每个分组内data字段的平均值。GROUP BY DATE_TRUNC('hour', timestamp):按截断后的小时时间分组。ORDER BY hour_start:按时间顺序排序结果,方便查看。
你之前的尝试问题说明
你之前的查询要么是获取全量数据,要么是计算整个时间范围的总和,没有按小时进行分组,所以无法得到每个时间间隔的平均值。
原始操作记录
gs[public]> tql lctime select * where timestamp < TIMESTAMPADD(HOUR, TIMESTAMP('2022-12-28T00:00:00Z'), -1) and timestamp > TIMESTAMPADD(HOUR, TIMESTAMP('2022-12-27T00:00:00Z'), -1)
362 results. (0 ms)
gs[public]> get 10
timestamp,data,temperature
2022-12-27T02:08:08.055Z,359.0,359.0
2022-12-27T02:34:00.105Z,359.0,359.0
2022-12-27T02:34:56.511Z,0.0,0.0
2022-12-27T02:35:56.511Z,1.0,1.0
2022-12-27T02:36:56.511Z,2.0,2.0
2022-12-27T02:37:56.511Z,3.0,3.0
2022-12-27T02:38:56.511Z,4.0,4.0
2022-12-27T02:39:56.511Z,5.0,5.0
2022-12-27T02:40:56.511Z,6.0,6.0
2022-12-27T02:41:56.511Z,7.0,7.0
The 10 results had been acquired.
gs[public]> tql lctime select sum(data) where timestamp < TIMESTAMPADD(HOUR, TIMESTAMP('2022-12-28T00:00:00Z'), -1) and timestamp > TIMESTAMPADD(HOUR, TIMESTAMP('2022-12-27T00:00:00Z'), -1);
1 results. (0 ms)
gs[public]> get 10
Result
65338.0
The 1 results had been acquired.
内容的提问来源于stack exchange,提问作者Nooruddin Lakhani

