gpt4 book ai didi

sql - SQL Server 2008如何计算记录之间的时间

转载 作者:行者123 更新时间:2023-12-04 14:18:14 25 4
gpt4 key购买 nike

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

 Old      New           Time Entered        Order Number
NULL Step 1 4/30/12 10:43 1C2014A
Step 1 Step 2 5/2/12 10:17 1C2014A
Step 2 Step 3 5/2/12 10:28 1C2014A
Step 3 Step 4 5/2/12 11:14 1C2014A
Step 4 Step 5 5/2/12 11:19 1C2014A
Step 5 Step 9 5/3/12 11:23 1C2014A
NULL Step 1 5/18/12 15:49 1C2014B
Step 1 Step 2 5/21/12 9:21 1C2014B
Step 2 Step 3 5/21/12 9:34 1C2014B
Step 3 Step 4 5/21/12 10:08 1C2014B
Step 4 Step 5 5/21/12 10:09 1C2014B
Step 5 Step 6 5/21/12 16:27 1C2014B
Step 6 Step 9 5/21/12 18:07 1C2014B
NULL Step 1 6/12/12 10:28 1C2014C
Step 1 Step 2 6/13/12 8:36 1C2014C
Step 2 Step 3 6/13/12 9:05 1C2014C
Step 3 Step 4 6/13/12 10:28 1C2014C
Step 4 Step 6 6/13/12 10:50 1C2014C
Step 6 Step 8 6/13/12 12:14 1C2014C
Step 8 Step 4 6/13/12 15:13 1C2014C
Step 4 Step 5 6/13/12 15:23 1C2014C
Step 5 Step 8 6/13/12 15:30 1C2014C
Step 8 Step 9 6/18/12 14:04 1C2014C
  • 这些步骤不需要按顺序进行,因此第 1 步可以在第 5 步之后发生。
  • 订单的记录不是按步骤或订单顺序存储的,而是根据输入的时间与其他订单混合在一起的。按订单号然后按新订购的示例数据不正常,不能依赖。
  • 对于任何给定的订单,每个步骤都可以重复,如果对一个订单重复,则逐步求和。
  • Old 列中起始步骤记录始终为空
  • 起始步长的计算方式为给定订单的新列中的值与旧列中的值之间的时间差。

输出可以很简单:

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())

在线工作示例:http://www.sqlfiddle.com/#!3/fbaff/11

更新:

上述查询可以多次显示一个步骤(例如:订单 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

在线工作示例:http://www.sqlfiddle.com/#!3/fbaff/14

关于sql - SQL Server 2008如何计算记录之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com