如何在SQL Server 2008中计算记录间隔时间

如何在SQL Server 2008中计算记录间隔时间,sql,sql-server-2008,Sql,Sql Server 2008,对于sql 2008中的审计表,我需要计算每个订单在给定步骤中的时间(表示为新列) 这些步骤不需要是连续的,因此步骤1可以在步骤5之后进行 订单的记录不是按步骤或顺序顺序存储的,而是根据输入的时间与其他订单混合存储的。按订单号排序然后新建的样本数据不正常,无法依赖 对于任何给定的订单,每个步骤都可以重复,如果对订单重复,则按步骤求和 起始步骤记录在旧列中始终为空 起始步长计算为给定顺序的新列和旧列中的值之间的时间差 输出可以简单到: Order Number Step Time

对于sql 2008中的审计表,我需要计算每个订单在给定步骤中的时间(表示为新列)

  • 这些步骤不需要是连续的,因此步骤1可以在步骤5之后进行
  • 订单的记录不是按步骤或顺序顺序存储的,而是根据输入的时间与其他订单混合存储的。按订单号排序然后新建的样本数据不正常,无法依赖
  • 对于任何给定的订单,每个步骤都可以重复,如果对订单重复,则按步骤求和
  • 起始步骤记录在旧列中始终为空
  • 起始步长计算为给定顺序的新列和旧列中的值之间的时间差
输出可以简单到:

Order Number   Step      Time in Step
1C2014A        Step 1    6:09

这就是我想到的:

select 
  a1.OrderNumber,
  a1.New as Step, 
  datediff(second, a1.TimeEntered, isnull(a2.timeEntered,getdate()))
    as [Time in Step (seconds)]
from AuditTrail a1
left join AuditTrail a2
  on a1.New = a2.Old 
  and a1.OrderNumber = a2.OrderNumber
对于从未发出订单的步骤,计算到当前时刻的时间(
getdate()

在线工作示例: 更新: 上述查询可以多次显示一个步骤(例如:order
1C2014C
多次执行步骤4)

若要按顺序/步骤分组并显示每对的总时间,请改用以下SQL语句:

select
  a1.OrderNumber,
  a1.New as Step, 
  sum(datediff(second, a1.TimeEntered, isnull(a2.timeEntered,getdate())))
    as [Total Time in Step (seconds)]
from AuditTrail a1
left join AuditTrail a2
  on a1.New = a2.Old 
  and a1.OrderNumber = a2.OrderNumber
group by a1.OrderNumber, a1.New
order by a1.OrderNumber

在线工作示例:你能描述一下输出应该是什么样子吗?你从哪里得到的6:09(即:给定你的值,你是如何得出这个数字的)<代码>5/2/12 10:17-4/30/12 10:43不止一天。您是在找人帮您解决这个问题,还是有可以解决的具体问题或问题?抱歉,6:09只是一个样本编号,而不是实际结果。我试着迅速做些事情。解决问题当然是件好事,但关于方法的建议也会有所帮助。我只是不知道该怎么办?
select
  a1.OrderNumber,
  a1.New as Step, 
  sum(datediff(second, a1.TimeEntered, isnull(a2.timeEntered,getdate())))
    as [Total Time in Step (seconds)]
from AuditTrail a1
left join AuditTrail a2
  on a1.New = a2.Old 
  and a1.OrderNumber = a2.OrderNumber
group by a1.OrderNumber, a1.New
order by a1.OrderNumber