mysql - 需要数据库两个月前每小时的数据

标签 mysql sql database datetime group-by

我有一个包含 cpuload、freememory、磁盘空间、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,但我只想要两个月前的数据。

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

最佳答案

一种方法是按时间戳列的日期和时间部分以及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

关于mysql - 需要数据库两个月前每小时的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701403/

相关文章:

MySQL 只返回最后的日期/时间记录

mysql - 如何修复在 MySQL Workbench 中运行 SQL 脚本时出现的错误?

php - 正确编号 SQL 查询的一些技巧

MySql 全文搜索似乎很慢,如何才能使其更快?需要任何优化吗?

c# - 将记录插入 sql db 后返回一个值

sql - 如何生成日期系列以占用谷歌 BigQuery 中缺失的日期?

javascript - PostgreSQL 数据库 - 如何按顺序查询表(无限滚动)

database - 主键在实时数据场景中有用吗?

database - 使用持续部署或自动部署时,如何部署数据库?

mysql - 匹配数据库表的整行