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
你怎么知道什么时候停电结束? – podiluska 2012-08-03 15:14:55
不要使用'BETWEEN',你应该总是以'下限包含,上限排他'的形式处理范围 - 特别是对于SQL Server的日期/时间类型尤其如此铸造时的变化)。假设你不能记录_future_事件,你只需要扫描下界。另外,还没有解决的停电呢? – 2012-08-03 15:30:32
我并不担心这是否是目前的停电,我只需要每日报告显示过去24小时内和过去一周内的停电情况,因此这对我来说是个诀窍。 – 2012-08-03 18:48:54