【问题标题】:MySQL get average values per hour from the last 24 hoursMySQL 获取过去 24 小时每小时的平均值
【发布时间】:2014-07-03 10:34:19
【问题描述】:

我使用以下查询来获取一天中每小时的平均值,但我没有得到最新数据而不是最旧数据:

SELECT id, serverID, AVG(performance) as performance, AVG(online) as online, HOUR(timestamp)
    FROM stats_server
    WHERE serverID= :serverID AND DATE_SUB(`timestamp`,INTERVAL 1 HOUR)
    GROUP BY HOUR(timestamp)
    ORDER BY id ASC

【问题讨论】:

  • 你说的是订单吗?如果是这样,为什么不试试ORDER BY id DESC
  • 不,此查询已将输出限制为 24 个结果,因此 order 工作正常,但仅适用于 24 个结果
  • 您在 WHERE 子句的“DATE_SUB”部分缺少某些内容:类似于 timestamp > DATE_SUB(timestamp, INTERVAL 24 HOUR)。此外,您要 1 小时,而您要 24 小时(所以按他们分组)
  • 您错过了 DATE_SUB 的条件:AND timestamp > DATE_SUB(timestamp,INTERVAL 1 HOUR)
  • @Uriil 如果我添加这个,结果是一样的。

标签: mysql sql


【解决方案1】:

您必须提及过去 24 小时的数据:

SELECT id, serverID, AVG(performance) as performance, AVG(online) as online, 
HOUR(timestamp) FROM stats_server
WHERE serverID= :serverID AND DATE_SUB(`timestamp`,INTERVAL 1 HOUR) And 
timestamp > DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY HOUR(timestamp)
ORDER BY id ASC

【讨论】:

  • 那是另一种解决方法,我还没想过,谢谢。
  • 抱歉,我只是注意到它不起作用,因为它显示的是“昨天”的统计数据,而不是过去 24 小时的统计数据。我们可以在 24 小时内做同样的事情吗?
  • 是的,它正确的现在将占用当前时间戳,感谢您更新我,我已经编辑了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 2018-01-31
  • 1970-01-01
相关资源
最近更新 更多