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

ozxc1zmp  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(436)

我正在为icinga2数据库生成一个报告。
我想查看每个主机每个服务每天的状态时间。
我有以下数据结构:
柱:
state_time>监视对象的状态从a变为b的时间
状态>对象现在的状态(a,b…)
上次状态>对象在当前时间之前的状态
主机名>主机对象的名称
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

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

ht4b089n

ht4b089n1#

可以为表创建列组,如: @curRank := @curRank + 1 AS rank 和内部连接到同一个表 @curRank := @curRank + 2 AS rank 所以你会得到上一个值。有了这张表,你就能计算出你需要的东西。

相关问题