2012-08-03 81 views
0

我有一個跟蹤網絡中斷的數據庫,我想運行一個報告,告訴我持續30分鐘以上的中斷。我可以把它告訴我所有的中斷,但我不知道如何才能讓我看到只有30分鐘以上的中斷。這是我迄今爲止所擁有的。datediff大於

SELECT 
    StartTime.EventTime, 
    Nodes.NodeId, 
    Nodes.Caption, 
    Nodes.Location, 
    StartTime.Message, 
    DATEDIFF(Mi, StartTime.EventTime, 
    (SELECT TOP 1 EventTime 
    FROM Events AS Endtime 
    WHERE EndTime.EventTime > StartTime.EventTime AND EndTime.EventType = 5 
     AND EndTime.NetObjectType = 'N' 
     AND EndTime.NetworkNode = StartTime.NetworkNode 
    ORDER BY EndTime.EventTime)) AS OutageDurationInMinutes 
FROM Events StartTime INNER JOIN Nodes ON StartTime.NetworkNode = Nodes.NodeID 
WHERE (StartTime.EventType = 1) 
    AND (StartTime.NetObjectType = 'N') 
    AND eventtime between dateadd(day, -1, getdate()) and getdate() 
ORDER BY Nodes.Caption ASC 

我看到的結果是這樣的。我刪除了一些信息。

Time of Outage  Name Location Down Event   Outage Duration 
8/3/2012 4:14  x  x  Stopped Responding    2 
8/4/2012 5:14  x  x  Stopped Responding     
8/5/2012 4:14  x    Stopped Responding    52 
8/6/2012 4:14  x  x  Stopped Responding    20 
+0

你怎麼知道什麼時候停電結束? – podiluska 2012-08-03 15:14:55

+0

不要使用'BETWEEN',你應該總是以'下限包含,上限排他'的形式處理範圍 - 特別是對於SQL Server的日期/時間類型尤其如此鑄造時的變化)。假設你不能記錄_future_事件,你只需要掃描下界。另外,還沒有解決的停電呢? – 2012-08-03 15:30:32

+0

我並不擔心這是否是目前的停電,我只需要每日報告顯示過去24小時內和過去一週內的停電情況,因此這對我來說是個訣竅。 – 2012-08-03 18:48:54

回答

0

的一種方法是使你的查詢子查詢或CTE:

with q as (<your query here without the order by>) 
select * 
from q 
where q.OutageDuragtionInMinutes > 30 
order by Caption 
+0

這個伎倆。謝謝你的幫助。 – 2012-08-03 15:34:01