【问题标题】:need database hourly data before two months需要两个月前的数据库每小时数据
【发布时间】:2017-10-12 04:26:20
【问题描述】:

我有一个包含 cpuload、freememory、diskspace、cpu 利用率和主机名字段的表。我正在运行一个 cron 作业,以在所有主机(例如:4 个主机)中每 10 分钟获取一次数据。 现在我在数据库中有一年的数据。

我想将该数据转换为每小时平均数据。但我只需要两个月前的数据。最近两个月的数据不应该打扰。 我的数据是这样的

 hostname              | cpuload | freedisk  | freemem |timestamp 
 localhost.localdomain | 0.15    | 136052    | 383660  | 2017-08-01 00:10:08 
 localhost.localdomain | 0.03    | 136492    | 383660  | 2017-08-01 00:20:08 
 localhost.localdomain | 0.01    | 133456    | 383660  | 2017-08-01 00:30:08 
 localhost.localdomain | 0.10    | 64544     | 383660  | 2017-08-01 00:40:08 
 localhost.localdomain | 0.01    | 68148     | 383660  | 2017-08-01 01:00:08 

每 10 分钟数据将添加到今天,即 2017-10-12 11:00:00

现在我想获取两个月前的数据,即从 2017-08-12 11:00:00 到 2017-08-01 00:00:00 的数据,我需要转换为每小时数据

SELECT Avg(CpuLoad) AS avgcpuload
    ,Avg(FreeMemory) AS avgfreemem
    ,Avg(FreeDisk) AS avgfreedisk
    ,Avg(Cpu_util) AS avgcpuutil
FROM Dynamic_Host_Information;

我得到了avg,但我只想要两个月前的数据。

请帮助我。 提前致谢 萨加雷迪

【问题讨论】:

  • 您想检索前 2 个月的数据,而在此之前只是 avg?请分享一些示例数据和所需的输出。
  • 首先我想获得数据前 2 个月和平均 10 分钟数据到每小时平均值(数据前 2 个月,而不是前 2 个月数据)。
  • 前 2 个月的数据。我知道了。但是avg 10 mins data to hourly average 我不明白这句话。您能否分享示例数据和所需的输出以帮助我们帮助您。
  • 我根据你的建议更新了我的帖子

标签: mysql sql database datetime group-by


【解决方案1】:

一种方法可能是通过date and hour only 部分timestamp 列以及where 子句来排除以前的2 月数据,如下所示,以得到您想要的结果。

SELECT t1.hostname
    ,avg(cpuload) AS cpuload
    ,avg(freedisk) AS freedisk
    ,avg(freemem) AS freemem
FROM table1 t1
WHERE t1.TIMESTAMP < current_timestamp - interval '42' day
GROUP BY date_format(t1.TIMESTAMP, '%Y%m%d%H');

INTERVAL '42' DAY 用于排除OctSep 数据。你可以做相应的调整。

结果:

hostname                cpuload     freedisk      freemem
-------------------------------------------------------------
localhost.localdomain   0.072500    117636.0000   383660.0000
localhost.localdomain   0.010000    68148.0000    383660.0000

更新 1:

如果您需要相关时间段的数据。

SELECT t1.hostname
    ,avg(cpuload) AS cpuload
    ,avg(freedisk) AS freedisk
    ,avg(freemem) AS freemem
FROM table1 t1
WHERE t1.TIMESTAMP between '2017-08-01 00:00:00' and '2017-08-12 11:00:00'
GROUP BY date_format(t1.TIMESTAMP, '%Y%m%d%H');

您可以查看演示here

【讨论】:

  • 谢谢zarruq。我需要更多帮助。很抱歉没有尝试就问。我是这个数据库的新手。在这里,我想将结果插入同一个表并删除我们进行操作的 2 个月前的数据。你能帮我吗
  • 请参考当前问题提出另一个问题。我们很乐意为您提供帮助。谢谢! :-)
  • 非常感谢 zarruq :)
  • 请帮我将获得的结果更新到同一个表中并从表中删除旧数据
猜你喜欢
  • 2018-07-10
  • 1970-01-01
  • 2021-06-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多