Показать результат на основе ближайшей даты к 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. И в противном случае выбираются только те строки, которые отличаются от предыдущих.