计算有差距的天数

时间:2016-08-12 16:10:54

标签: sql-server tsql

表:

+-----------+--------------+------------+------------+
| RequestID | RequestStaus | StartDate  |  EndDate   |
+-----------+--------------+------------+------------+
|         1 | pending      | 9/1/2015   | 10/2/2015  |
|         1 | in progress  | 10/2/2015  | 10/20/2015 |
|         1 | completed    | 10/20/2015 | 11/3/2015  |
|         1 | reopened     | 11/3/2015  | null       |
|         2 | pending      | 9/5/2015   | 9/7/2015   |
|         2 | in progress  | 9/7/2015   | 9/25/2015  |
|         2 | completed    | 9/25/2015  | 10/7/2015  |
|         2 | reopened     | 10/10/2015 | 10/16/2015 |
|         2 | completed    | 10/16/2015 | null       |
+-----------+--------------+------------+------------+

我想计算已开放的天数,但不包括已完成和重新开放之间的天数。例如,RequestID 1,开放的日期将是(2015年11月3日 - 2015年1月9日)+(GetDate() - 2015年11月3日),对于请求2,总天数将是(10/7) / 2015 - 9/5/2015)+(2015年10月16日 - 2015年10月10日)。

我想要的结果将是:

+-----------+-------------------------------+
| RequestID |          DaysOpened           |
+-----------+-------------------------------+
|         1 | 63 + (getdate() - 11/3/2015)  |
|         2 | 38                            |
+-----------+-------------------------------+

如何解决此问题?谢谢!

1 个答案:

答案 0 :(得分:0)

测试。效果很好。 :)

注意: 1)我想required result = (FirstCompleteEndDate - PendingStartDate)+(Sum of all the Reopen duration)

2)所以我使用了自联接。表格b提供了紧跟在每个completed的{​​{1}}记录之后的确切in process记录。表c提供了RequestID

Sum of all the Reopen duration

<强>结果:

enter image description here