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天。上面的代码已经给出了。当我从一个日期减去另一个日期时,我可以得到完整的日期?我想你需要用你想要的输出的例子来扩展你的原始问题。