如何计算 SQL Server 中按日期和用户分组的条目之间的平均时间?
Posted
技术标签:
【中文标题】如何计算 SQL Server 中按日期和用户分组的条目之间的平均时间?【英文标题】:How to calculate average time between entries grouped by date and user in SQL Server? 【发布时间】:2020-04-17 19:12:14 【问题描述】:我的数据看起来像:
User Start_Time End_Time
-------------------------------------------------
A 2018-12-05 08:30:00 2018-12-05 09:45:00
B 2018-12-05 09:30:00 2018-12-05 10:00:00
B 2018-12-05 10:30:00 2018-12-05 10:45:00
A 2018-12-05 10:45:00 2018-12-05 11:45:00
A 2018-12-05 12:15:00 2018-12-05 12:30:00
A 2018-12-06 05:30:00 2018-12-05 06:45:00
B 2018-12-06 06:45:00 2018-12-05 07:45:00
B 2018-12-06 08:45:00 2018-12-05 09:30:00
我正在尝试计算一个条目的 End_Time 和下一个条目的 Start_time 之间的平均时间长度,按用户和日期分组。
从上面的示例中,输出应如下所示:
User Date Average Time Between Entries(in minutes)
------------------------------------------------------------
A 2018-12-05 45
B 2018-12-05 30
A 2018-12-06 Null
B 2018-12-06 60
是否有可以完成此任务的 SQL Server 查询?
【问题讨论】:
我们随时为您提供帮助。向我们展示您的尝试,我们会加入。 到目前为止你尝试了什么???如果没有,那就开始工作吧。Is there a SQL Server query that could accomplish this?
:是的。
虽然你的数据有错误(最后三行的结束日期错误),但我不明白为什么这会被否决。
【参考方案1】:
使用lead()
:
select t.user, convert(date, start_time),
avg(datediff(minute, end_time, next_start_time))
from (select t.*,
lead(start_time) over (partition by user, convert(date, start_time) order by start_time) as next_start_time
from t
) t
group by user, convert(date, start_time);
Here 是一个 dbfiddle(数据固定,因此结束时间大于开始时间)。
【讨论】:
以上是关于如何计算 SQL Server 中按日期和用户分组的条目之间的平均时间?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL Server 在此查询中按天对结果进行分组?