Sql 如何获得平均任务完成时间
我有两列日期,如下所示:Sql 如何获得平均任务完成时间,sql,sql-server,Sql,Sql Server,我有两列日期,如下所示: DateStart DateFinish 2019-07-24 13:24:08.7530000 2019-07-29 12:13:00.8930000 2019-08-07 11:06:54.7540000 2019-10-02 11:59:08.2780000 我需要获得平均任务完成时间(小时:分钟:秒)。平均时间可能超过23:59:59。 例如: AvgTime 48:25:12 我使用MS SQL。假设您
DateStart DateFinish
2019-07-24 13:24:08.7530000 2019-07-29 12:13:00.8930000
2019-08-07 11:06:54.7540000 2019-10-02 11:59:08.2780000
我需要获得平均任务完成时间(小时:分钟:秒)。平均时间可能超过23:59:59。
例如:
AvgTime
48:25:12
我使用MS SQL。假设您的DateStart和DateFinish存储为DateTime2,您可以使用
DATEDIFF(秒,DateStart,DateFinish)
获取两个日期之间的总秒数。然后可以在此值上使用AVG
,以获得所有记录的平均秒数
然后使用一点数学知识将其重新格式化为小时:分钟:秒,然后转换为varchar将元素粘在一起<代码>右('00'+…,2)强制前导零
SELECT
CONVERT(VARCHAR(12), AvgSeconds / 60 / 60 )
+':'+ right(('00'+ CONVERT(VARCHAR(2), AvgSeconds / 60 % 60)),2)
+':'+ RIGHT(('00'+CONVERT(VARCHAR(2), AvgSeconds % 60)),2) AS [HHMMSS]
From
(
SELECT
avg(DATEDIFF(SECOND,DateStart, DateFinish)) AS AvgSeconds
From
SomeTable
) AS T
如果你想在其中包括天,那么你可以添加另一个级别
SELECT
CONVERT(VARCHAR(12), AvgSeconds / 60 / 60 /24)
+':'+ right(('00'+ CONVERT(VARCHAR(12), AvgSeconds / 60 / 60 %24)), 2)
+':'+ right(('00'+ CONVERT(VARCHAR(2), AvgSeconds / 60 % 60)),2)
+':'+ RIGHT(('00'+CONVERT(VARCHAR(2), AvgSeconds % 60)),2) AS [DDHHMMSS]
From
(
SELECT
avg(DATEDIFF(SECOND,DateStart, DateFinish)) AS AvgSeconds
FROM
SomeTable
) AS T
试试这个
select
Convert(varchar,[seconds]/3600/24) +':'+
Convert(varchar,([seconds]/3600)%24) +':'+
Convert(varchar,([seconds]/60)%60)+':'+
Convert(varchar,([seconds]%60)) AS [AvgTime(DDHHMMSS)]
from (
select
Convert(varchar,AVG(DATEDIFF(SECOND,DateStart,DateFinish)))
as seconds from #ras
)XX
请展示你尝试过什么计算逻辑是什么?太棒了!非常感谢你!如何添加天数?当FinishTime=2019-09-03和StartTime 2019-08-07时,我希望2019-08-07-2019-09-03=26天或26*24小时:)2019-08-07 00:00和2019-09-03 00:00:00之间正好是27天。上面的代码已经给出了。当我从一个日期减去另一个日期时,我可以得到完整的日期?我想你需要用你想要的输出的例子来扩展你的原始问题。