Я пытался решить эту проблему, но не смог.Мне нужно узнать, сколько времени сервер недоступен.Вот следующие данные
Date | Time | Address | Status
11-14 | 6:32 | 1.1.1.1 | Down --- Count Start
11-14 | 6:34 | 1.1.1.1 | Down
11-14 | 6:54 | 1.1.1.1 | UP
11-14 | 7:20 | 1.1.1.1 | Down --- Reset Count to 1
11-14 | 7:25 | 1.1.1.1 | Down
11-14 | 7:30 | 1.1.1.1 | Up
11-14 | 7:40 | 1.1.1.1 | Down --- Reset Count to 1
11-14 | 6:35 | 2.2.2.2 | Down --- Now this is a different counter cause of different IP
У меня есть этот запрос
SELECT [date]
,[time]
,[address]
,[ms]
,[bytes]
,[ttl]
,[Status]
,COALESCE(lag([Status]) over(order by [time]),'--') [Row]
INTO #temp
FROM
(
SELECT [date]
,[time]
,[address]
,[ms]
,[bytes]
,[ttl]
,CASE WHEN [status] = 'Success' THEN 'UP' ELSE 'DOWN' END [Status]
FROM [ESPS].[dbo].[Ping History] p
INNER JOIN [SuperDashboard].[dbo].[IP_Mapping] i ON i.[IP] = p.address
WHERE [Date] = CONVERT(Date,GETDATE())
) a
SELECT [date]
,[time]
,[address]
,[ms]
,[bytes]
,[ttl]
,[Status]
FROM
(
SELECT [date]
,[time]
,[address]
,[ms]
,[bytes]
,[ttl]
,[Status]
,CASE WHEN [Status] != [Row] THEN 1 ELSE 0 END [row]
FROM #temp
) a WHERE [row] = 1
DROP TABLE #temp
, но он применим только с одним адресом, так как при попытке добавить 2.2.2.2
все перемешалось.Идеальным результатом этого является получение продолжительности простоя сервера каждый раз, когда он сталкивается с простоями.Я надеюсь, что кто-то может помочь мне с этим или указать мне правильное направление, по крайней мере.
Редактировать 1: Ожидаемый результат должен быть
Date | Start DownTime | End DownTime | Address
11-14 | 6:32 | 6:54 | 1.1.1.1
11-14 | 7:20 | 7:30 | 1.1.1.1
11-14 | 7:40 | | 1.1.1.1
11-14 | 6:35 | | 2.2.2.2