SQL-不同行中的列值之间的差异

时间:2018-09-17 05:22:37

标签: sql sql-server row

我有一个具有以下结构的表

ID - Task  | Performed BY | Start Date | End Date  
1 --- Task 3 --- John --------- 9/16/2017 - 9/17/2017  
1 --- Task 2 --- Jim  ----------- 9/14/2017 - 9/16/2017  
1 --- Task 1 --- John  --------- 9/10/2107 - 9/13/2017  
2 --- Task 2 --- Jane --------- 9/14/2017 - 9/15/2017  
2 --- Task 1 --- Claire -------- 9/12/2017 - 9/13/2017  

我需要创建一个新列,该列显示执行SQL中每个ID的所有任务所花费的总时间(持续时间)。即每个ID的最后一个任务的结束日期减去第一个任务的开始日期。

以下是我需要的结果:

ID - Task  | Performed BY | Start Date | End Date | Duration  
1 --- Task 3 --- John --------- 9/16/2017 - 9/17/2017 -- 7 Days  
1 --- Task 2 --- Jim  ----------- 9/14/2017 - 9/16/2017 -- 7 Days  
1 --- Task 1 --- John  --------- 9/10/2107 - 9/13/2017 -- 7 Days  
2 --- Task 2 --- Jane --------- 9/14/2017 - 9/15/2017 -- 3 Days  
2 --- Task 1 --- Claire -------- 9/12/2017 - 9/13/2017 -- 3 Days 

我需要使用sql来执行此任务。非常感谢您对我如何完成此任务的任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:2)

我们可以在此处尝试将DATEDIFFMIN/MAX用作分析函数:

SELECT
    ID, Task, [Performed By], [Start Date], [End Date],
        DATEDIFF(day,
                 MIN([Start Date]) OVER (PARTITION BY ID),
                 MAX([End Date]) OVER (PARTITION BY ID)) [Duration in Days]
FROM yourTable;

如果我正确地读取了您的数据,则持续时间由给定ID组记录的最小开始日期和最大结束日期之间的差得出。