У меня есть таблица, из которой я пытаюсь сгенерировать отчеты.
В основном это журнал, когда что-то ломается (выходит из строя), а затем исправляется.
Схема таблицы и некоторые примеры данных приведены ниже.
Для иллюстрации:
1 строка вставляется при падении
1 строка вставляется при возврате.
Что я пытаюсь сделать, так это сообщать о различных аспектах, таких как:
Количество простоя в данный день / неделю / месяц
Количество раз, когда оно уменьшилось в данный день / неделю / месяц.
В идеале таким образом, чтобы его можно было легко экспортировать, чтобы превзойти, или что-то похожее, что можно было бы получить.
У меня проблемы с поиском этой информации для получения каких-либо запросов.
У меня есть такой, например:
SELECT [Name], datepart(day,[Inserted]), count([SystemDown])
FROM [DownTimeLog]
WHERE [SystemDown]=1
GROUP BY [Name],datepart(day,[Inserted])
, который дает мне число раз, когда система выходила из строя, что является хорошей отправной точкой.
Но я пытаюсь найти способ показать общее время, в течение которого он был недоступен, но я рисую пробел.
Например, некоторые дни могут быть равны 0, иногда - несколько раз, поэтому попытка суммировать разницу во времени между двумя соответствующими строками непроста.
CREATE TABLE [dbo].[DownTimeLog]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] VARCHAR(30) NOT NULL,
[SystemDown] BIT NOT NULL,
[Inserted] DATETIME NOT NULL
)
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',1,'Jun 14 2011 1:49:58:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',0,'Jun 14 2011 2:49:58:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',1,'Jun 15 2011 1:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',0,'Jun 15 2011 2:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',1,'Jun 15 2011 4:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',0,'Jun 15 2011 5:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',1,'Jun 17 2011 1:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',0,'Jun 17 2011 3:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',1,'Jun 18 2011 10:00:00:000AM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',0,'Jun 18 2011 11:00:00:000AM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',1,'Jun 18 2011 1:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',0,'Jun 18 2011 3:30:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',1,'Jun 18 2011 4:00:00:000PM')
INSERT INTO [DownTimeLog] ([Name],[SystemDown],[Inserted])VALUES('System1',0,'Jun 18 2011 8:00:00:000PM')
Так, например, используя приведенные выше данные, я хотел бы получить данные обратно, что-то вроде:
System1 | 14 июня 2011 | 1 час | 1 случай
System1 | 15 июня 2011 | 2 часа | 2 случая
System1 | 16 июня 2011 | 0 часов | 0 событий
System1 | 17 июня 2011 | 2 часа | 1 случай
System1 | 18 июня 2011 | 7,5 часов | 3 случая
Я надеюсь, что кто-то может дать мне метод выполнения того, что я пытаюсь сделать.
-
Edit:
Спасибо всем за отличные ответы. Выручил меня за тонну.
Я думал, что мой sql был красивой строкой, но я никогда не слышал о кресте - думаю, мне нужно вернуться в школу!
Ура!