mysql - 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
但我不知道如何从上一行的计算开始。你能给我指出一个方向还是你有什么想法?谢谢!
解决方案
您可以为您的表创建一个排名,例如:
@curRank := @curRank + 1 AS rank
并且内部连接到同一个表
@curRank := @curRank + 2 AS rank
所以你将拥有以前的价值。有了这张表,您将能够计算出您需要什么。
推荐阅读
- html - 在无序列表中,如何仅将文本与第二列的中心对齐?
- haskell - No instance of (Eq ([a] -> [a])) when pattern matching a list of functions
- c++ - 数组旋转问题(C++)- 将数组和转换次数作为用户的输入
- android - 如何修复 > 没有方法签名:build_dxc6m5s863o0nfrfjdg2bqjp.android() 适用于参数类型
- react-native - 'react-native-render-html' 不渲染和在 iOS 上符合预期,但在 Android 上确实如此
- twitter-bootstrap - 单击 data-bs-toggle="collapse" 中的文本会在单击文本时向下滚动到子级
- javascript - 在功能组件中收到错误消息“渲染不同组件时无法更新组件(`Header`)”?
- html - Reactjs 的 SEO 替代 404 状态代码
- python - pymongo - 如何按最后日期为每个客户获取单一政策并按日期对所有政策进行排序?
- python - 如何在python中安装人脸识别