我遇到了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。 我不需要累积平均值。 请帮助我。
答案 0 :(得分: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'
a
和b
指的是同一个表中的两个不同的行。 WHERE
子句确保它们相隔5分钟。
如果没有匹配该时间距离的第二列,则查询结果中不会包含结果行。如果您的表格每五分钟没有数据点,但您必须搜索合适的合作伙伴,那么事情变得更加困难。可能会针对该用例调整This answer。或者您可以在应用程序级别而不是在数据库服务器上实现它。