根据最接近标准的日期显示结果
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 不同。否则,只会选择与之前不同的行。
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 不同。否则,只会选择与之前不同的行。