mysql计算前一行时间戳差异并按多个对象分组

标签 mysql group-by row summary icinga2

我正在尝试为 Icinga2 数据库生成报告。

我想查看每个主机每个服务每天的状态时间。

我有以下数据结构:

列:

State_Time > 监控对象状态从A变为B的时间

状态> 对象现在的状态(A,B..)

Last_State > 对象在当前时间之前的状态

主机名> 主机对象的名称

Servicename > 服务对象的名称

我希望报告看起来像这样:

host  | service | day | State A % | State B %
a.b.c | srvxyz  |1.1.1|        70 |        30

这样我基本上就可以看到可用性的百分比。

根据我的想法,我需要:

  • 按主机名分组、按服务名称分组、按日期时间字段的日期分组
  • 根据状态计算并汇总每个事件相对于前一个事件的时间

到目前为止我所拥有的是:

select
    sum(state_time_usec),
    max(name1),
    max(name2),
    max(date(state_time)),
    max(state)
from
    icinga_statehistory
    inner join icinga_objects on icinga_objects.object_id = icinga_statehistory.object_id

group by icinga_objects.object_id,date(state_time),state

order by state_time desc

但是我不知道如何从上一行的计算开始。你能给我指出一个方向或者你有什么想法吗? 谢谢!

最佳答案

您可以为您的表格创建排名,例如:

@curRank := @curRank + 1 AS 排名

并内连接到同一个表

@curRank := @curRank + 2 AS 排名

所以你将得到以前的值。通过这张表格,您将能够计算出您需要的内容。

关于mysql计算前一行时间戳差异并按多个对象分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50061863/

相关文章:

php - 使用 mysql 存储函数和选择查询

mysql - 数据库计数和分组错误

php - 错误中给出的警告 : mysql_fetch_array() expects parameter 1 to be resource, bool 值

css - 获取一行下的标签使用表格的全宽

c# - 如何编写 MySql 连接字符串的示例有哪些?

php - 将多个条目连接到单个条目

mysql - docker mysql 在不同的端口

sql - 连接表时出现问题,需要在分组之前对连接表进行排序

mysql - 重复行的条件

javascript - 在保留自动高度功能的同时指定行的最小高度 - Ag-grid