fix:修改了聚合查询
This commit is contained in:
parent
5d4fa3f515
commit
d133eedd06
@ -54,12 +54,13 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
|
|||||||
intervalMinutes = 60
|
intervalMinutes = 60
|
||||||
}
|
}
|
||||||
|
|
||||||
// 使用子查询和时间桶来实现聚合
|
// 使用更基本的SQL函数来实现聚合
|
||||||
query := `
|
query := `
|
||||||
SELECT
|
SELECT
|
||||||
DATE_FORMAT(
|
CONCAT(
|
||||||
DATE_SUB(timestamp, INTERVAL MOD(MINUTE(timestamp), ?) MINUTE),
|
DATE_FORMAT(timestamp, '%Y-%m-%d'), 'T',
|
||||||
'%Y-%m-%dT%H:%i:00'
|
HOUR(timestamp), ':',
|
||||||
|
FLOOR(MINUTE(timestamp) / ?) * ?, ':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,
|
||||||
@ -67,15 +68,19 @@ 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 bucket_time
|
GROUP BY
|
||||||
|
DATE(timestamp),
|
||||||
|
HOUR(timestamp),
|
||||||
|
FLOOR(MINUTE(timestamp) / ?)
|
||||||
ORDER BY bucket_time DESC
|
ORDER BY bucket_time DESC
|
||||||
`
|
`
|
||||||
|
|
||||||
// 执行查询
|
// 执行查询
|
||||||
rows, err := dao.db.Query(
|
rows, err := dao.db.Query(
|
||||||
query,
|
query,
|
||||||
intervalMinutes, // 时间桶参数
|
intervalMinutes, intervalMinutes, // 时间桶计算参数
|
||||||
start, end // 时间范围
|
start, end, // 时间范围
|
||||||
|
intervalMinutes // GROUP BY参数
|
||||||
)
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -97,7 +102,7 @@ func (dao *SensorDAO) GetAggregatedData(start, end time.Time, interval string) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 解析ISO格式的时间字符串
|
// 解析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 {
|
if err != nil {
|
||||||
logger.Logger.Printf("解析时间失败: %v, 原始字符串: %s", err, tsStr)
|
logger.Logger.Printf("解析时间失败: %v, 原始字符串: %s", err, tsStr)
|
||||||
continue
|
continue
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user