From 1d8969524bf339d14e81b43d752d5870b35055b5 Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Thu, 15 May 2025 17:40:28 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E8=81=9A=E5=90=88=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/dao/sensor.go | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/internal/dao/sensor.go b/internal/dao/sensor.go index 8cf301a..48541b5 100644 --- a/internal/dao/sensor.go +++ b/internal/dao/sensor.go @@ -54,13 +54,15 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) ( intervalMinutes = 60 } - // 使用更基本的SQL函数来实现聚合 + // 使用时间桶函数创建标准化的时间戳,并将其包含在GROUP BY子句中 query := ` SELECT - CONCAT( - DATE_FORMAT(timestamp, '%Y-%m-%d'), 'T', - HOUR(timestamp), ':', - FLOOR(MINUTE(timestamp) / ?) * ?, ':00' + DATE_FORMAT( + DATE_ADD( + DATE(timestamp), + INTERVAL (HOUR(timestamp) * 60 + FLOOR(MINUTE(timestamp) / ?) * ?) MINUTE + ), + '%Y-%m-%dT%H:%i:00' ) AS bucket_time, ROUND(AVG(temperature)/10, 1) AS avg_temp, MAX(rainfall) - MIN(rainfall) AS rainfall, @@ -68,10 +70,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) ( ROUND(AVG(wind_speed)/10, 1) AS avg_wind_speed FROM sensor_data WHERE timestamp BETWEEN ? AND ? - GROUP BY - DATE(timestamp), - HOUR(timestamp), - FLOOR(MINUTE(timestamp) / ?) + GROUP BY bucket_time ORDER BY bucket_time DESC ` @@ -79,8 +78,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) ( rows, err := dao.db.Query( query, intervalMinutes, intervalMinutes, // 时间桶计算参数 - start, end, // 时间范围 - intervalMinutes) + start, end) // 时间范围 if err != nil { logger.Logger.Printf("查询聚合数据失败: %v (间隔=%s, 开始=%s, 结束=%s)",