根据最接近标准的日期显示结果

Show result based of closest date to an crieteria

on/off 日期时间

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

整理有问题

我想用 on/off 显示日期时间。 但我只想要最接近的 on/off = 1 之前 on/off = 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 空 空 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

我知道如果我有参考资料我会和一群人一起做,但现在我只有 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

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 不同。否则,只会选择与之前不同的行。