我不确定这是否可以在单个查询中实现,但我正在尝试使用MySQL实现以下功能,但尚未找到解决方案。
我的表格结构有点像这样:
ID LOG_VALUE LOG_TIME
1 5000 19:05:42
2 6205 19:05:45
3 1000 19:05:40
1 5000 19:05:52
2 6403 19:05:55
3 1500 19:05:50
1 5000 19:06:02
2 6403 19:06:05
3 1500 19:06:00
以规则的间隔(即每10秒)将行插入此日志表中。我想查询记录以计算每分钟的综合平均log_value。
我遇到的问题是,我不确定如何计算每分钟的每个ID的平均值,以及任何给定分钟的平均值之和,只有一个或另一个。
基本来说,我想要实现这个过程:
下面的SQL没有按我的意愿行事,但我已将其包含在内以帮助解决问题。
SELECT ROUND(AVG(log_value)) AS average_value, EXTRACT(HOUR_MINUTE FROM log_time)
FROM (`logs`)
GROUP BY MINUTE(log_time), id
ORDER BY log_time DESC
感谢您提供的任何帮助。
答案 0 :(得分:1)
尝试以下
SELECT
ROUND(AVG(log_value)) AS average_value,
EXTRACT(HOUR_MINUTE FROM log_time),
id
FROM (`logs`)
GROUP BY
EXTRACT(HOUR_MINUTE FROM log_time), id
ORDER BY
log_time DESC
答案 1 :(得分:0)
SELECT id,
EXTRACT(HOUR_MINUTE FROM log_time),
ROUND(AVG(log_value)) AS average_value
FROM (`logs`)
GROUP BY EXTRACT(HOUR_MINUTE FROM log_time), id
UNION ALL
SELECT null id,
EXTRACT(HOUR_MINUTE FROM log_time),
ROUND(AVG(log_value)) AS average_value
FROM (`logs`)
GROUP BY EXTRACT(HOUR_MINUTE FROM log_time)
ORDER BY EXTRACT(HOUR_MINUTE FROM log_time)
第一个查询计算不同的Id,HOUR_MINUTE的平均值 第二个查询计算不同HOUR_MINUTE的平均值=该HOUR_MINUTE的每个Id平均值的总和
(id = null来做UNION)。