Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 select по изменению c 0 на 1 и с 1 на 0  [new]
sirus_christus
Member

Откуда:
Сообщений: 13
Добрый день!
Есть таблица типа

--------------------------------
value | timestamp |
0 |2018-12-13 13:43:00 |
0 |2018-12-13 13:43:05 |
0 |2018-12-13 13:43:10 |
1 |2018-12-13 13:43:15 |
1 |2018-12-13 13:43:20 |
0 |2018-12-13 13:43:25 |
0 |2018-12-13 13:43:30 |
----------------------------------

Как сделать выборку, что бы можно было вывести дату когда начинаются нули (0) и до начала единицы (1), т.е выводить время начала нулей и окончание - строку перед единицей?

Спасибо за любой совет!
15 дек 18, 11:27    [21764687]     Ответить | Цитировать Сообщить модератору
 Re: select по изменению c 0 на 1 и с 1 на 0  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Есть около миллиона разных решений этой задачи.
Например:
WITH Data AS 
(
 SELECT *
 FROM(VALUES
  (0,'2018-12-13T13:43:00')
 ,(0,'2018-12-13T13:43:05')
 ,(0,'2018-12-13T13:43:10')
 ,(1,'2018-12-13T13:43:15')
 ,(1,'2018-12-13T13:43:20')
 ,(0,'2018-12-13T13:43:25')
 ,(0,'2018-12-13T13:43:30')
 )T([value],[timestamp])
)
,GrData AS(SELECT GN=ROW_NUMBER()OVER(ORDER BY [timestamp])-ROW_NUMBER()OVER(PARTITION BY [value] ORDER BY [timestamp]),* FROM Data)
SELECT [value],[From]=MIN([timestamp]),[To]=MAX([timestamp])
FROM GrData
GROUP BY [value],GN
ORDER BY MIN([timestamp]);
15 дек 18, 14:53    [21764814]     Ответить | Цитировать Сообщить модератору
 Re: select по изменению c 0 на 1 и с 1 на 0  [new]
sirus_christus
Member

Откуда:
Сообщений: 13
iap, Спасибо огромное! Вы Бог SQL!
17 дек 18, 10:10    [21765679]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить