SQL查询以衡量对请求的历史响应时间

时间:2019-02-15 02:53:32

标签: sql-server tsql

假设我有一个包含一系列信息请求的表,我们将其称为requests

| key | Individual | Date       | Due date   |
| 0   | 1          | 2019-01-01 | 2019-01-10 |
| 1   | 2          | 2019-01-02 | 2019-01-11 |
| 2   | 2          | 2019-01-03 | 2019-01-11 |

这些请求行中的每个行都将通知用户有关完成任务的要求(任务无关紧要)。他们完成任务后,将在另一表中输入一行,称为completions

| key | Individual | Date       |
| 10  |        1   | 2018-12-28 |
| 11  |        2   | 2019-01-05 |
| 12  |        2   | 2019-01-06 |

如果任务完成(由个人完成)的日期比请求的日期大 ,则认为请求已得到满足。只要请求的日期比完成的日期短(即,请求在任务完成之前进入),一次完成将解决该用户的所有未完成的请求。

最终,我想要创建一个视图,以记录完成每个请求所需的时间,无论是从发出请求以来的天数,到截止日期还有多少天(或逾期多少天。

为了实现这一目标,我认为我需要一个中间视图,告诉我哪个完成可以满足每个请求(如果有的话)

所以我想要一个生成以下内容的查询:

| RequestKey | CompletedBy |
| 0          | NULL        |
| 1          | 11          |
| 2          | 11          |

因为完成10是在发出请求之前发生的,所以从未填充过请求0。请求1和2都由完成11填充,因为这是在每个请求发出之后发生的第一个完成。

从这里转到最终视图,该视图告诉我完成请求所需的时间,逾期时间等。这很容易,因为我可以对表进行联接并计算完成日期之间的差额和请求日期,但对我来说还不太清楚如何到达上表。

1 个答案:

答案 0 :(得分:1)

您可以使用outer apply获取每个请求的完成日期:

select r.*, c.date as completion_date,
       datediff(day, r.date, c.date) as days_to_completion
from requests r outer apply
     (select top (1) c.*
      from completions c
      where c.individual = r.individual and
            c.date >= r.date
      order by c.date desc
     ) c;