如何找到平均时间? SQL 服务器 2017

Posted

技术标签:

【中文标题】如何找到平均时间? SQL 服务器 2017【英文标题】:How to find the average time? SQL Server 2017 【发布时间】:2021-10-30 23:59:18 【问题描述】:

我有这样的要求:

created_at  - datetime

我需要找到每个状态的平均时间。例如,将所有状态 2 的时间相加并除以它们的数量。结果,得到 2 天 5 小时。

如何解决我的请求以使传送带操作成为可能?

【问题讨论】:

请不要将图像添加为样本数据或想要的结果。 如果你有 dbfiddle 为什么不发布链接? 请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

以您有限的示例数据为例,这样的工作可以完成,尽管它并不漂亮:

declare @deals table(
    deal_id int,
    status_id int,
    created_at datetime
)

insert into @deals values
(1,1,'2021-05-12 18:54:00.000'),
(1,2,'2021-05-13 13:34:00.000'),
(1,3,'2021-05-17 14:39:00.000'),
(1,2,'2021-05-18 09:24:00.000'),
(1,3,'2021-05-18 09:24:00.000'),
(1,4,'2021-05-18 10:27:00.000'),
(1,5,'2021-05-19 13:00:00.000'),
(1,4,'2021-05-19 13:00:00.000'),
(1,5,'2021-05-24 08:06:00.000'),
(2,1,'2021-05-14 17:31:00.000')

select 
    status_id,
    cast(avg(datediff(minute,cast(created_at as date),created_at))/60 as varchar(2)) + ':' + right('0' + cast(avg(datediff(minute,cast(created_at as date),created_at)) - ((avg(datediff(minute,cast(created_at as date),created_at))/60)*60) as varchar(2)),2) as averageTime
from @deals
group by status_id
order by status_id

你会得到这些结果:

【讨论】:

这是天才!!非常感谢! 如果不难,你能解释一下这些表达的意思吗? + ':' + right('0' + cast whay '0'? 还有什么 varchar(2)) ? 我添加了前导零,以便如果该值是单个数字,它会在结果中正确显示。我将其转换为varchar(2),因为这是转换后数值作为字符串的最大长度。 如果您对答案感到满意,请考虑接受。 ??

以上是关于如何找到平均时间? SQL 服务器 2017的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何仅在组遵循某些规则时才找到许多组总和的平均值

如何通过 SQL 查询找到组结果的平均值?

Oracle SQL如何找到小于平均值的计数

MS Access SQL 范围和平均值

如何在pyspark的列中找到列表的平均值?

loadrunner性能测试,在并发10个用户的情况下,sqlserver服务器cpu平均在80%以上,如何解决