交错时间表与新行

时间:2018-03-28 08:35:46

标签: sql sql-server sql-server-2012

我正在使用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

1 个答案:

答案 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列。