我的问题是关于如何编写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。

10-07 12:58
查看更多