fix:修改了聚合查询

This commit is contained in:
fengyarnom 2025-05-15 17:40:28 +08:00
parent 41a2041374
commit 1d8969524b

View File

@ -54,13 +54,15 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
intervalMinutes = 60 intervalMinutes = 60
} }
// 使用更基本的SQL函数来实现聚合 // 使用时间桶函数创建标准化的时间戳并将其包含在GROUP BY子句中
query := ` query := `
SELECT SELECT
CONCAT( DATE_FORMAT(
DATE_FORMAT(timestamp, '%Y-%m-%d'), 'T', DATE_ADD(
HOUR(timestamp), ':', DATE(timestamp),
FLOOR(MINUTE(timestamp) / ?) * ?, ':00' INTERVAL (HOUR(timestamp) * 60 + FLOOR(MINUTE(timestamp) / ?) * ?) MINUTE
),
'%Y-%m-%dT%H:%i:00'
) AS bucket_time, ) AS bucket_time,
ROUND(AVG(temperature)/10, 1) AS avg_temp, ROUND(AVG(temperature)/10, 1) AS avg_temp,
MAX(rainfall) - MIN(rainfall) AS rainfall, 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 ROUND(AVG(wind_speed)/10, 1) AS avg_wind_speed
FROM sensor_data FROM sensor_data
WHERE timestamp BETWEEN ? AND ? WHERE timestamp BETWEEN ? AND ?
GROUP BY GROUP BY bucket_time
DATE(timestamp),
HOUR(timestamp),
FLOOR(MINUTE(timestamp) / ?)
ORDER BY bucket_time DESC ORDER BY bucket_time DESC
` `
@ -79,8 +78,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
rows, err := dao.db.Query( rows, err := dao.db.Query(
query, query,
intervalMinutes, intervalMinutes, // 时间桶计算参数 intervalMinutes, intervalMinutes, // 时间桶计算参数
start, end, // 时间范围 start, end) // 时间范围
intervalMinutes)
if err != nil { if err != nil {
logger.Logger.Printf("查询聚合数据失败: %v (间隔=%s, 开始=%s, 结束=%s)", logger.Logger.Printf("查询聚合数据失败: %v (间隔=%s, 开始=%s, 结束=%s)",