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

时间:2018-04-27 11:53:58

标签: 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

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

1 个答案:

答案 0 :(得分:0)

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

@curRank := @curRank + 1 AS rank

使用

连接到同一个表

@curRank := @curRank + 2 AS rank

所以你将拥有之前的价值。通过这个表,您将能够计算出您需要的东西。