2010-10-28 5 views
4

У меня есть набор записей, которые отслеживают доступность системы. Образец данных:Как я могу агрегировать/разворачивать эти данные?

System_ID Event DateOfEvent 
1   Down  2010-05-01 13:20:10 
1   Up  2010-05-01 13:25:19 
1   Down  2010-05-05 10:12:12 
1   Up  2010-05-06 14:10:16 
2   Down  2010-05-05 20:22:22 
2   Up  2010-05-06 23:20:26 

Как преобразовать эти данные в следующий макет?

System_Id DowntimeStart   DowntimeInSeconds 
1   2010-05-01 13:20:10 309 
1   2010-05-05 10:12:12 100684 
2   2010-05-05 20:22:22 97084 

ответ

2

Вы можете попробовать это:

Select et1.System_ID, et1.[Date] as DateDown, et2.[Date] as DateUp, DATEDIFF(s, et1.[Date], et2.[Date]) as DownForSeconds 
    From EventTable et1 
    Left Join EventTable et2 On et1.System_ID = et2.System_ID and et2.[Event] = 'Up' 
Where 
et1.[Event] = 'Down' 
and et2.[Date] = (Select Top 1 [Date] From EventTable Where System_ID = et2.System_ID and [Date] > et1.[Date]) 
+0

@ESpo: Спасибо Эспо за указание на старый запрос, но это была ошибка, когда неупорядоченные/пропущенные события «Up» были проблемы, показывая должным образом. Я исправил свой последний запрос, чтобы решить эти проблемы. – 2010-10-28 11:11:11

Смежные вопросы