【问题标题】:mysql calculation of previous row timestamp difference and group by multiple objectsmysql计算前行时间戳差异并按多个对象分组
【发布时间】:2018-04-27 11:53:57
【问题描述】:

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

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

我有以下数据结构:

列:

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

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

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

Hostname > 主机对象的名称

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

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

【问题讨论】:

    标签: mysql group-by row summary icinga2


    【解决方案1】:

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

    @curRank := @curRank + 1 AS rank

    和内连接到同一张表

    @curRank := @curRank + 2 AS rank

    所以你会得到以前的值。有了这张表,您就可以计算出您需要什么。

    【讨论】:

    • 您好,ecp,谢谢您的好主意。我必须承认,我从未在查询中使用过排名,也没有使用局部变量。所以我不太确定将其放在查询中的哪个位置?我认为第一个在 select 语句中,但是 join 是如何工作的?或者我是否需要在 select statemenet 中有一个包含这些的子查询,然后将子查询加入我的表?感谢您的支持!
    猜你喜欢
    • 2019-07-21
    • 2020-08-28
    • 2021-08-28
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多