fix:修改了聚合查询

This commit is contained in:
fengyarnom 2025-05-15 17:32:51 +08:00
parent 2be5f5212a
commit ffc5278e52

View File

@ -44,42 +44,47 @@ func (dao *SensorDAO) Insert(data *model.SensorData) error {
func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) ([]model.AggregatedData, error) {
// 参数化时间间隔
var intervalMinutes int
var timeFormat string
switch interval {
case "5min":
intervalMinutes = 5
timeFormat = "%Y-%m-%dT%H:%i:00"
case "30min":
intervalMinutes = 30
timeFormat = "%Y-%m-%dT%H:%i:00"
default: // 1hour
intervalMinutes = 60
timeFormat = "%Y-%m-%dT%H:00:00"
}
// 计算秒数
intervalSeconds := intervalMinutes * 60
// 构建通用查询
// 使用子查询和时间桶来实现聚合
query := `
WITH time_buckets AS (
SELECT
DATE_FORMAT(MIN(timestamp), '%Y-%m-%dT%H:%i:%S') as ts,
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
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 FLOOR(UNIX_TIMESTAMP(timestamp)/?)
ORDER BY ts DESC
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
ORDER BY bucket_time DESC
`
// 执行查询
rows, err := dao.db.Query(
query,
start, end, // 时间范围
intervalSeconds, // GROUP BY参数
intervalMinutes, // 时间桶参数
start, end // 时间范围
)
if err != nil {