Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Интервалы статуса логов состояния / 3 сообщений из 3, страница 1 из 1
19.02.2018, 12:13
    #39604070
-Ден-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервалы статуса логов состояния
Доброго дня всем.

Нужна помощь в написании запроса.
Есть таблица логов состояния оборудования, нужно определить интервалы определённого состояния оборудования.

Как пример таблица: Оборудование, Время опроса, Статус
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DECLARE @Table Table(Form INTEGER, DateTime DATETIME, Type INTEGER)
INSERT INTO @Table
	VALUES
	(101, '20-01-2018 15:06:56.000',	2),
	(101, '20-01-2018 15:06:58.000',	2),
	(101, '20-01-2018 15:07:00.000',	3),
	(101, '20-01-2018 15:07:02.000',	2),
	(101, '20-01-2018 15:07:04.000',	2),
	(101, '20-01-2018 15:07:06.000',	2),
	(101, '20-01-2018 15:07:08.000',	4),
	(101, '20-01-2018 15:07:10.000',	4),
	(101, '20-01-2018 15:07:12.000',	2),
	(101, '20-01-2018 15:07:14.000',	2),
	(101, '20-01-2018 15:07:16.000',	2),
	(101, '20-01-2018 15:07:18.000',	57),
	(102, '20-01-2018 15:07:20.000',	57),
	(102, '20-01-2018 15:07:22.000',	2),
	(102, '20-01-2018 15:07:24.000',	25),
	(102, '20-01-2018 15:07:26.000',	25),
	(102, '20-01-2018 15:07:28.000',	2),
	(102, '20-01-2018 15:07:30.000',	2),
	(102, '20-01-2018 15:07:32.000',	0),
	(102, '20-01-2018 15:07:34.000',	2)



Ожидаемый результат:
Form DateStart DateEnd Type 101 20-01-2018 15:06:56.00020-01-2018 15:06:58.0002101 20-01-2018 15:07:00.00020-01-2018 15:07:00.0003101 20-01-2018 15:07:02.00020-01-2018 15:07:06.0002101 20-01-2018 15:07:08.00020-01-2018 15:07:10.0004101 20-01-2018 15:07:12.00020-01-2018 15:07:16.0002101 20-01-2018 15:07:18.00020-01-2018 15:07:18.00057102 20-01-2018 15:07:20.00020-01-2018 15:07:20.00057102 20-01-2018 15:07:22.00020-01-2018 15:07:22.0002102 20-01-2018 15:07:24.00020-01-2018 15:07:26.00025102 20-01-2018 15:07:28.00020-01-2018 15:07:30.0002102 20-01-2018 15:07:32.00020-01-2018 15:07:32.0000102 20-01-2018 15:07:34.00020-01-2018 15:07:34.0002

Версия сервера: Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64)

Данных много, курсор не хотелось бы использовать.
FAQ просмотрел, похожего ничего не нашёл.
Наверняка задача типовая, буду признателен за пример запроса решения такого типа задач.
...
Рейтинг: 0 / 0
19.02.2018, 12:22
    #39604076
Интервалы статуса логов состояния
-Ден-,

STFF
...
Рейтинг: 0 / 0
19.02.2018, 12:57
    #39604112
-Ден-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервалы статуса логов состояния
Добрый Э - Эх,


Спасибо, не понял сначала как искать на форуме.
В итоге вот что получилось.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
DECLARE @Table Table(Form INTEGER, DateTime DATETIME, Type INTEGER)
INSERT INTO @Table
	VALUES
	(101, '20-01-2018 15:06:56.000',	2),
	(101, '20-01-2018 15:06:58.000',	2),
	(101, '20-01-2018 15:07:00.000',	3),
	(101, '20-01-2018 15:07:02.000',	2),
	(101, '20-01-2018 15:07:04.000',	2),
	(101, '20-01-2018 15:07:06.000',	2),
	(101, '20-01-2018 15:07:08.000',	4),
	(101, '20-01-2018 15:07:10.000',	4),
	(101, '20-01-2018 15:07:12.000',	2),
	(101, '20-01-2018 15:07:14.000',	2),
	(101, '20-01-2018 15:07:16.000',	2),
	(101, '20-01-2018 15:07:18.000',	57),
	(102, '20-01-2018 15:07:20.000',	57),
	(102, '20-01-2018 15:07:22.000',	2),
	(102, '20-01-2018 15:07:24.000',	25),
	(102, '20-01-2018 15:07:26.000',	25),
	(102, '20-01-2018 15:07:28.000',	2),
	(102, '20-01-2018 15:07:30.000',	2),
	(102, '20-01-2018 15:07:32.000',	0),
	(102, '20-01-2018 15:07:34.000',	2)
--SELECT * FROM @Table
--SELECT @@VERSION
	SELECT	
		[Form]
		,min([DateTime]) AS DateStart
		,max([DateTime]) AS DateEnd
		,[Type]
	FROM (
         SELECT 
	   *
 	   ,ROW_NUMBER() OVER(PARTITION BY [Form], [Type] ORDER BY [DateTime]) - ROW_NUMBER() OVER(PARTITION BY [Form] ORDER BY [DateTime]) AS grp_id
	   FROM @Table
		) v
	GROUP BY [Form], [Type], grp_id 
	ORDER BY 1,2



На тестовых данных отработало корректно.
Ознакомлюсь с оконными функциями поподробней.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Интервалы статуса логов состояния / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]