2013-06-25 37 views
0

我有一个包含类似于下面列的东西表:高级分区查询

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

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

我需要弄清楚的是每种表单类型的审批之间的平均时间。我已经尝试过使用分区的每一种方式来解决这个问题,但是由于每个表单没有固定数量的审批者,所以我陷入了困境。我应该如何处理这个问题?

+0

sql服务器没有一个名为'integer'的类型。你可能是指'int'。 –

+0

@zespri好吧,是的,显然;) – Codingo

回答

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)

因此,简单地将总分钟数除以1得到平均分钟数的记录数。

+3

其实,你想用count(*) - 1'来划分它。 –

+0

更新,良好的通话。 –