我正在使用SQL Server 2012, 我的数据如下:
**Begin** **End** **Status**
2018-02-01 00:00:00.000 2018-02-01 02:09:20.180 6
2018-02-01 02:24:50.180 2018-02-01 02:31:50.180 -1
2018-02-01 02:23:50.180 2018-02-01 02:24:20.180 4
2018-02-01 02:42:50.180 2018-02-01 02:47:20.180 4
2018-02-01 02:54:50.180 2018-02-01 02:55:20.180 4
2018-02-01 03:12:20.180 2018-02-01 03:16:50.180 -1
2018-02-01 03:10:50.180 2018-02-01 03:11:20.180 4
2018-02-01 03:27:20.180 2018-02-01 03:30:20.180 4
2018-02-01 03:45:20.180 2018-02-01 03:53:50.180 4
2018-02-01 04:14:50.180 2018-02-01 04:17:50.180 4
2018-02-01 04:32:50.180 2018-02-01 04:33:20.180 3
我想要的是行之间的新插入,以便新插入的行具有前一个的结束和下一个的开始。这可以通过LEAD和LAG实现。我如何迭代和交错?
结果:
**Begin** **End** **Status**
2018-02-01 00:00:00.000 2018-02-01 02:09:20.180 6
2018-02-01 02:09:20.180 2018-02-01 02:24:50.180 0
2018-02-01 02:24:50.180 2018-02-01 02:31:50.180 -1
2018-02-01 02:31:50.180 2018-02-01 02:23:50.180 0
2018-02-01 02:23:50.180 2018-02-01 02:24:20.180 4
2018-02-01 02:24:20.180 2018-02-01 02:42:50.180 0
2018-02-01 02:42:50.180 2018-02-01 02:47:20.180 4
2018-02-01 02:47:20.180 2018-02-01 02:54:50.180 0
2018-02-01 02:54:50.180 2018-02-01 02:55:20.180 4
2018-02-01 02:55:20.180 2018-02-01 03:12:20.180 0
2018-02-01 03:12:20.180 2018-02-01 03:16:50.180 -1
2018-02-01 03:16:50.180 2018-02-01 03:10:50.180 0
2018-02-01 03:10:50.180 2018-02-01 03:11:20.180 4
2018-02-01 03:11:20.180 2018-02-01 03:27:20.180 0
2018-02-01 03:27:20.180 2018-02-01 03:30:20.180 4
2018-02-01 03:30:20.180 2018-02-01 03:45:20.180 0
2018-02-01 03:45:20.180 2018-02-01 03:53:50.180 4
2018-02-01 03:53:50.180 2018-02-01 04:14:50.180 0
2018-02-01 04:14:50.180 2018-02-01 04:17:50.180 4
2018-02-01 04:17:50.180 2018-02-01 04:32:50.180 0
2018-02-01 04:32:50.180 2018-02-01 04:33:20.180 3
答案 0 :(得分:1)
尝试以下方法:
SELECT
Status = 0,
[Begin] = LAG(T.[End], 1, NULL) OVER (ORDER BY T.[Begin] ASC),
[End] = LEAD(T.[Begin], 1, NULL) OVER (ORDER BY T.[Begin] ASC)
FROM
YourTable AS T
请验证ORDER BY
列。