高级分区查询

时间:2013-06-25 01:32:23

标签: sql sql-server sql-server-2008 tsql

我有一个包含类似于以下列的表格:

infopath_form_id     (integer)
form_type            (integer)
approver             (varchar)
event_timestamp      (datetime)

此表包含infopath表单的批准历史记录,系统中提交的每个表单都有一个唯一的infopath_form_id,以便存储该表单。每个表单没有一致的批准者数量(因为它根据交易的价值而有所不同)但是表格总是至少有两个批准者。每个批准任务都作为另一行写入表中,并且只有先前批准的历史记录存储在此表中。

我需要知道的是每种表单类型的批准之间的平均时间。我已经尝试过使用分区解决这个问题,但是由于每个表单都没有固定数量的批准者,所以我会陷入困境。我该如何处理这个问题?

1 个答案:

答案 0 :(得分:3)

我相信你想要这个:

SELECT infopath_form_id
     , DATEDIFF(Minutes,MIN(event_timestamp),MAX(event_timestamp))/CAST(COUNT(*)-1 AS FLOAT)
FROM Table
GROUP BY infopath_form_id

这将为您提供每个InfoPath_form_id的第一个和最后一个条目之间的平均分钟数。

使用的函数说明:

  1. MIN()返回最早的日期
  2. MAX()返回最新日期
  3. DATEDIFF()返回给定单位中两个日期之间的差异(本例中为分钟)
  4. COUNT()返回每个分组项目的行数(即InfoPath_form_id)
  5. 所以简单地将经过的总分钟数除以比记录数之间平均分钟数的记录数少一个。