powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Интервалы статуса логов состояния
3 сообщений из 3, страница 1 из 1
Интервалы статуса логов состояния
    #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
Интервалы статуса логов состояния
    #39604076
-Ден-,

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


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