データベース MySQL には、「問題」または「不明」から「正常」へのオブジェクトのステータス変更に関する情報を含むテーブルがあります。
CREATE TABLE `events` (
`eventid` bigint(20) unsigned NOT NULL,
`source` int(11) NOT NULL DEFAULT '0',
`object` int(11) NOT NULL DEFAULT '0',
`objectid` bigint(20) unsigned NOT NULL DEFAULT '0',
`clock` int(11) NOT NULL DEFAULT '0',
`value` int(11) NOT NULL DEFAULT '0',
`acknowledged` int(11) NOT NULL DEFAULT '0',
`ns` int(11) NOT NULL DEFAULT '0',
`value_changed` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`eventid`),
KEY `events_1` (`object`,`objectid`,`eventid`),
KEY `events_2` (`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
eventid | objectid | clock | value
77843 13619 1341588185 0
77859 13619 1341589085 2
77889 13619 1341590585 0
82174 13619 1341843065 2
82193 13619 1341843785 1
82197 13619 1341843965 0
ここで、値 0 - OK 1 - 問題、2 - 不明、およびクロック - 時刻 (フォーマット unixtime)。
指定された時間のイベントの期間をカウントするクエリがあります。
select a.eventid,a.objectid,a.`interval` from (
select
@prev_clock,
@prev_value,
l.*,
if(l.value='0' && @prev_value!='0' &&
@prev_objectid=l.objectid,TIMEDIFF(FROM_UNIXTIME(l.clock),FROM_UNIXTIME(@prev_clock)),null) 'interval',
(@prev_clock:=l.clock),(@prev_value:=l.value),(@prev_objectid:=l.objectid)
from events l,(select @vclock:=0,@prev_value:='',@prev_objectid:=0) b1
where l.clock>=1341588185 and objectid=13619
order by l.objectid,l.eventid
) a where a.value='0';
結果は次のとおりです。
eventid objectid interval
77843 13619
77889 13619 00:25:00
82197 13619 00:03:00
次の条件に従って、クエリ/式を修正してください。
1) ステータスは 0 から 1 に変化し、次に 2 に変化し、その後 1 に戻り (何回も) .... ずっと後に 0 に変化します (たとえば、イベントの期間 82 197 = 1341843965-1341843065 = 900秒であり、180 ではありません)。
2) セルの「間隔」には、空の値があってはなりません。