fix:修改了聚合查询

This commit is contained in:
fengyarnom 2025-05-15 17:36:30 +08:00
parent 5d4fa3f515
commit d133eedd06

View File

@ -54,12 +54,13 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
intervalMinutes = 60
}
// 使用子查询和时间桶来实现聚合
// 使用更基本的SQL函数来实现聚合
query := `
SELECT
DATE_FORMAT(
DATE_SUB(timestamp, INTERVAL MOD(MINUTE(timestamp), ?) MINUTE),
'%Y-%m-%dT%H:%i:00'
CONCAT(
DATE_FORMAT(timestamp, '%Y-%m-%d'), 'T',
HOUR(timestamp), ':',
FLOOR(MINUTE(timestamp) / ?) * ?, ':00'
) AS bucket_time,
ROUND(AVG(temperature)/10, 1) AS avg_temp,
MAX(rainfall) - MIN(rainfall) AS rainfall,
@ -67,15 +68,19 @@ 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 bucket_time
GROUP BY
DATE(timestamp),
HOUR(timestamp),
FLOOR(MINUTE(timestamp) / ?)
ORDER BY bucket_time DESC
`
// 执行查询
rows, err := dao.db.Query(
query,
intervalMinutes, // 时间桶参数
start, end // 时间范围
intervalMinutes, intervalMinutes, // 时间桶计算参数
start, end, // 时间范围
intervalMinutes // GROUP BY参数
)
if err != nil {
@ -97,7 +102,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
}
// 解析ISO格式的时间字符串
data.Timestamp, err = time.Parse("2006-01-02T15:04:05", tsStr)
data.Timestamp, err = time.Parse("2006-01-02T15:04:00", tsStr)
if err != nil {
logger.Logger.Printf("解析时间失败: %v, 原始字符串: %s", err, tsStr)
continue