首页 > 解决方案 > mysql计算前行时间戳差异并按多个对象分组

问题描述

我正在尝试为 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

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

标签: mysqlgroup-byrowsummaryicinga2

解决方案


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

@curRank := @curRank + 1 AS rank

并且内部连接到同一个表

@curRank := @curRank + 2 AS rank

所以你将拥有以前的价值。有了这张表,您将能够计算出您需要什么。


推荐阅读