0

我对 MYSQL 有一些问题,我需要每 5 分钟减去两个特定时间之间的数据,然后平均 5 分钟的数据。我现在正在做的是:

select (avg(columnname)),convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval 
from Databasename.Tablename 
where datetime BETWEEN '2012-09-12 10:50:00' AND '2012-09-12 14:50:00' 
group by datetime div 500;

它是累积平均值。假设我在 11 点得到 500,在 11.05 得到 700,我需要的平均值是 (700-500)/5 = 40。但现在我得到 (500+700)/5 = 240。我不需要累积平均值. 请帮助我。

4

1 回答 1

0

对于您正在谈论的那种平均值,您不想使用子句聚合多行。相反,您希望使用同一个表中的两个不同行GROUP BY来计算结果。这需要自加入:

SELECT (b.columnname - a.columnname)/5, a.datetime, b.datetime
FROM Database.Tablename a, Database.Tablename b
WHERE b.datetime = a.datetime + INTERVAL 5 MINUTE
  AND a.datetime BETWEEN '2012-09-12 10:50:00' AND '2012-09-12 14:45:00'

ab引用同一张表的两个不同行。该WHERE子句确保它们之间正好相隔 5 分钟。

如果没有与该时间距离匹配的第二列,则查询结果中不会包含任何结果行。如果您的表格不是每五分钟就有一次数据点,但您必须寻找合适的合作伙伴,那么事情就会变得更加困难。这个答案可能会针对该用例进行调整。或者您可以在应用程序级别而不是在数据库服务器上实现这一点。

于 2012-09-18T14:42:23.247 回答