diff --git a/internal/dao/sensor.go b/internal/dao/sensor.go index f487526..93305e2 100644 --- a/internal/dao/sensor.go +++ b/internal/dao/sensor.go @@ -56,27 +56,18 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) ( // 使用子查询和时间桶来实现聚合 query := ` - WITH time_buckets AS ( - SELECT - DATE_FORMAT( - DATE_SUB(timestamp, INTERVAL MOD(MINUTE(timestamp), ?) MINUTE), - '%Y-%m-%dT%H:%i:00' - ) AS bucket_time, - AVG(temperature) AS temp, - MAX(rainfall) - MIN(rainfall) AS rain, - AVG(humidity) AS hum, - AVG(wind_speed) AS wind - FROM sensor_data - WHERE timestamp BETWEEN ? AND ? - GROUP BY bucket_time - ) SELECT - bucket_time, - ROUND(temp/10, 1) AS avg_temp, - rain AS rainfall, - ROUND(hum/10, 1) AS avg_humidity, - ROUND(wind/10, 1) AS avg_wind_speed - FROM time_buckets + DATE_FORMAT( + DATE_SUB(timestamp, INTERVAL MOD(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, + ROUND(AVG(humidity)/10, 1) AS avg_humidity, + ROUND(AVG(wind_speed)/10, 1) AS avg_wind_speed + FROM sensor_data + WHERE timestamp BETWEEN ? AND ? + GROUP BY bucket_time ORDER BY bucket_time DESC `