我的问题是如何编写 SQL 查询来计算连续事件之间的平均时间。
我有一张小桌子:
event Name | Time
stage 1 | 10:01
stage 2 | 10:03
stage 3 | 10:06
stage 1 | 10:10
stage 2 | 10:15
stage 3 | 10:21
stage 1 | 10:22
stage 2 | 10:23
stage 3 | 10:29
我想构建一个查询,获取阶段(i)和阶段(i+1)之间的平均时间作为答案。
例如,
第 2 阶段和第 3 阶段之间的平均时间为 5:
(3+6+6)/3 = 5
啊啊啊,还有一点黑魔法:
select a.eventName, b.eventName, AVG(DATEDIFF(MINUTE, a.[Time], b.[Time])) as Average from
(select *, row_number() over (order by [time]) rn from events) a
join (select *, row_number() over (order by [time]) rn from events) b on (a.rn=b.rn-1)
group by
a.eventName, b.eventName
这将为您提供如下行:
stage3 stage1 2
stage1 stage2 2
stage2 stage3 5
第一列是开始事件,第二列是结束事件。如果事件 1 之后有事件 3,该事件也将被列出。否则,您应该提供一些关于哪个阶段在哪个阶段之后的标准,因此仅在这些阶段之间计算时间。
Added:这在 Transact-SQL(MSSQL、Sybase)和 PL/SQL(Oracle、PostgreSQL)上应该可以正常工作。不过我还没有测试过,仍然可能存在语法错误。这不适用于任何版本的 MySQL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)