【问题标题】:subtract the data for every 5 minutes between two particular times在两个特定时间之间每 5 分钟减去一次数据
【发布时间】:2012-09-18 11:10:28
【问题描述】:

我的 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。 我不需要累积平均值。 请帮助我。

【问题讨论】:

  • 如果你在这个问题中包含测试数据,你将有更好的机会得到一个好的答案。最好使用createinclude 语句。
  • 顺便说一句:使用avg,您不会得到(500+700)/5 = 240,而是(500+700)/2 = 600,因为它按计数进行平均,而没有特别注意相关时间。要除以 5,您必须提供 5 行输入,即 (…+…+…+…+…)/5

标签: mysql


【解决方案1】:

对于您所说的平均值,您不希望使用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 分钟。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多