我的问题是关于如何编写SQL查询来计算连续事件之间的平均时间。
我有一张小 table :
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
我想建立一个查询,以作为stage(i)和stage(i + 1)之间平均时间的答案。
例如,
第2阶段到第3阶段的平均时间为5:
(3+6+6)/3 = 5
最佳答案
Aaaaand撒上一点黑魔法:
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,则也会列出该事件。否则,您应该提供有关哪个阶段跟随哪个阶段的一些标准,因此时间仅在这两个阶段之间计算。
已添加:这在Transact-SQL(MSSQL,Sybase)和PL/SQL(Oracle,PostgreSQL)上均应正常运行。但是我还没有测试过,仍然可能存在语法错误。这不适用于任何版本的MySQL。