SQL Server计算连续行之间的差异

问题描述 投票:1回答:1

我有一个表,其中包含项目的各个部分及其开始和结束日期。它是SQL Server2017。任务是按项目列出开始,结束日期和持续时间。 (一个项目包含所有行,其中下一行的开始日期与上一行的结束日期相同。没有任何行重叠)

这样,您可以复制与我一起使用的相同样本数据。

CREATE TABLE PROJECTS (
Task_id int PRIMARY KEY ,
Start_Date date,
End_Date date )

INSERT INTO PROJECTS
VALUES 
(1, '01/01/2020','01/02/2020'),
(2, '01/02/2020','01/03/2020'),
(3, '01/03/2020','01/04/2020'),

(4, '01/06/2020','01/07/2020'),
(5, '01/07/2020','01/08/2020'),

(6, '01/10/2020','01/11/2020'),

(7, '01/12/2020','01/13/2020'),

(8, '01/21/2020','01/22/2020'),
(9, '01/22/2020','01/23/2020'),
(10,'01/23/2020','01/24/2020')

根据上述数据,我的输出如下:

Project_id  Start_Date  End_Date    Duration_days
1           01/01/2020  04/01/2020  3
2           06/01/2020  08/01/2020  2
3           10/01/2020  11/01/2020  1
4           12/01/2020  13/01/2020  1
5           21/01/2020  24/01/2020  3

下面的代码代表执行的第一部分,即结束日期之间的差的计算。我被困住了。

select projects.*,
   datediff(day, end_date,
            lead(end_date) over (partition by task_id order by end_date)
           ) as diff
from projects;

这是我期望的:

Task_id Start_Date  End_Date    diff
1       2020-01-01  2020-01-02  1
2       2020-01-02  2020-01-03  1
3       2020-01-03  2020-01-04  1
4       2020-01-06  2020-01-07  3
5       2020-01-07  2020-01-08  1
6       2020-01-10  2020-01-11  3
7       2020-01-12  2020-01-13  2
8       2020-01-21  2020-01-22  9
9       2020-01-22  2020-01-23  1
10      2020-01-23  2020-01-24  1

我在Diff列的每一行中得到的都是NULL。请帮助我完成这一部分,如果可能的话,请帮助我解决整个问题。

sql-server tsql rows
1个回答
0
投票

选择一个*,datediff(day,a.end_date,b.End_Date)作为差异来自#projects在b.Task_id = a.Task_id + 1上加入#projects b;

© www.soinside.com 2019 - 2024. All rights reserved.