我有一个具有以下结构的表
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来执行此任务。非常感谢您对我如何完成此任务的任何帮助。
谢谢!
答案 0 :(得分:2)
我们可以在此处尝试将DATEDIFF
和MIN/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
组记录的最小开始日期和最大结束日期之间的差得出。