Sql 高级分区查询
我有一个表,其中包含类似于以下列的内容:Sql 高级分区查询,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个表,其中包含类似于以下列的内容: infopath_form_id (integer) form_type (integer) approver (varchar) event_timestamp (datetime) 此表包含infopath表单的审批历史记录,系统中提交的每个表单都有一个唯一的infopath表单id,用于存储此表单。每个表单的审批人数量不一致(因为它根据事务处理的值而不同),但是一个表单始终至少有两个
infopath_form_id (integer)
form_type (integer)
approver (varchar)
event_timestamp (datetime)
此表包含infopath表单的审批历史记录,系统中提交的每个表单都有一个唯一的infopath表单id,用于存储此表单。每个表单的审批人数量不一致(因为它根据事务处理的值而不同),但是一个表单始终至少有两个审批人。每个审批任务将作为另一行写入表中,并且此表中仅存储以前审批的历史记录
我需要了解的是每种表单类型的批准之间的平均时间。我尝试过使用分区来解决这一问题,但由于每个表单没有固定数量的审批人,我陷入了困境。我应该如何处理这个问题?我相信您希望:
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表单id的第一个条目和最后一个条目之间的平均分钟数
使用的功能说明:
MIN()
返回最早的日期MAX()
返回最新日期DATEDIFF()
返回给定单位中两个日期之间的差值(本例中为分钟)COUNT()
返回每个分组项目的行数(即InfoPath表单id)因此,只需将经过的总分钟数除以记录数的1,即可得出事件之间的平均分钟数。我相信您希望这样:
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表单id的第一个条目和最后一个条目之间的平均分钟数
使用的功能说明:
MIN()
返回最早的日期MAX()
返回最新日期DATEDIFF()
返回给定单位中两个日期之间的差值(本例中为分钟)COUNT()
返回每个分组项目的行数(即InfoPath表单id)因此,只需将经过的总分钟数除以记录数(即事件之间的平均分钟数)的1即可。sql server没有称为
integer
的类型。你的意思可能是int
@zespri是的,很明显;)sql server没有名为integer
的类型。你的意思可能是int
@zespri是的,很明显;)实际上,您想将其除以count(*)-1
。实际上,您想将其除以count(*)-1
。