hive 计算特定事件与下一个事件之间的差异

xzlaal3s  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(141)

我在起草SQL时遇到了问题。数据结构非常简单。ID是用户的索引。事件代表现在正在发生的事情。时间戳记录了该事件在MS中发生的时间。
数据如下所示:
| 标识符|事件|计时器|
| - -|- -|- -|
| 一个|A级|10个|
| 一个|B|十一|
| 一个|A级|十三个|
| 一个|C类|十五个|
我想看看如何计算事件A和下一个事件之间的时间差或持续时间。下一个事件可以是任何东西,它不会再是A。
例如,对于ID 1,我们有2个事件,time.A - time.B = 11-10,以及time.C - time.A = 15-13,因此结果如下所示:
| 标识符|持续时间|
| - -|- -|
| 一个|一个|
| 一个|2个|
我不太清楚如何起草这个SQL。请随意分享任何想法。
提前感谢您的帮助。

wz3gfoph

wz3gfoph1#

这是lead()的一个典型用例,它允许您访问排序分区中的“下一”行:

select t.*,
    lead(time) over(order by time) - time as duration
from mytable t

当没有“下一个”数据列时,lead()会传回null,并传播至duration
如果你想过滤一个给定的event,你需要在一个外部查询中进行(否则在我们计算持续时间之前,行将被过滤掉),所以:

select id, duration
from (
    select t.*,
        lag(time) over(order by time) - time as duration
    from mytable t    
) t
where event = 'A'

相关问题