Показать результат на основе ближайшей даты к crieteria

Время включения / выключения

1   2016-05-02 06:04:08.000
0   2016-05-02 06:08:42.000
1   2016-05-02 06:11:54.000
1   2016-05-02 06:13:41.000
1   2016-05-02 06:14:07.000
1   2016-05-02 06:14:28.000
1   2016-05-02 06:14:50.000
1   2016-05-02 06:15:59.000
1   2016-05-02 06:16:26.000
1   2016-05-02 06:24:23.000
0   2016-05-02 07:46:32.000
1   2016-05-02 10:14:06.000

У меня проблема с разбором.

Я хочу показать дату и время вкл / выкл. Но я хочу только самое близкое вкл / выкл = 1, прежде чем вкл / выкл = 0.

ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ:

on/off  datetime
1   2016-05-02 06:04:08.000
0   2016-05-02 06:08:42.000
1   2016-05-02 06:24:23.000
0   2016-05-02 07:46:32.000
1   2016-05-02 10:14:06.000

Дополнительно: если в конце нет 0, это должно дать getdate(),


СЛЕДУЮЩИЙ ШАГ

Большое спасибо, нашел, что следующий шаг мне нужно сделать

Начиная с конца 2016-05-02 06:04:14.000 NULL NULL 2016-05-02 06:08:31.000 2016-05-02 06:27:27.000 NULL NULL 2016-05-02 06:46:39.000 2016-05-02 06:47:10.000 NULL NULL 2016-05-02 06:51:31.000 2016-05-02 06:54:30.000 NULL NULL 2016-05-02 07:08:51.000 2016-05-02 07:10:21.000 NULL NULL 2016-05-02 07:12:31.000 2016-05-02 07:18:32.000 NULL NULL 2016-05-02 07:28:13.000 2016-05-02 07:29:02.000 NULL NULL 2016-05-02 07:33:00.000 2016-05-02 07:44:35.000 NULL NULL 2016-05-02 07:45:47.000

Я знаю, что я делаю это с группой, если у меня есть ссылка, но теперь у меня просто есть 0 и 1

ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ

Начальное окончание 2016-05-02 06:04:14.000 2016-05-02 06:08:31.000 2016-05-02 06:27:27.000 2016-05-02 06:46:39.000 2016-05-02 06:47:10.000 2016-05-02 06:51:31.000 2016-05-02 06:54:30.000 2016-05-02 07:08:51.000 2016-05-02 07:10:21.000 2016-05-02 07:12:31.000 2016-05-02 07:18:32.000 2016-05-02 07:28:13.000 2016-05-02 07:29:02.000 2016-05-02 07:33:00.000 2016-05-02 07:44:35.000 2016-05-02 07:45:47.000

1 ответ

Решение
select ThisRow.*
from
( SELECT row_number() over (order by Date_Time) as RowNr
      ,[OnOff]
      ,[Date_Time]  FROM [VH_Stam].[dbo].[Values]
   )  ThisRow 
  left outer join
  ( SELECT row_number() over (order by Date_Time) as RowNr
      ,[OnOff]
      ,[Date_Time] FROM [VH_Stam].[dbo].[Values]
   )  PreviousRow on
  ThisRow.RowNr = PreviousRow.RowNr +1
Where ThisRow.RowNr = 1 or
PreviousRow.OnOff <> ThisRow.OnOff

Строка номер 1 всегда выбирается, так как она всегда отличается от несуществующего номера строки 0. И в противном случае выбираются только те строки, которые отличаются от предыдущих.

Другие вопросы по тегам