fix:修改了聚合查询
This commit is contained in:
parent
41a2041374
commit
1d8969524b
@ -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)",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user