在 ClickHouse 中将密切发生的事件分组在一起

问题描述 投票:0回答:1

我已经订购了包含活动的桌子,有他们的时间(在 ClickHouse 表中):

时间 活动
10:30:00 活动1
10:30:05 活动2
10:30:59 活动2
10:31:00 活动2
10:31:00 活动1

对我来说,连续发生的相同事件是相同的。 我需要将这些事件合并在一起的函数。预期结果是:

时间 活动
10:30:00 活动1
10:30:05(可以是重复事件之后的任何时间) 活动2
10:31:00 活动1
sql clickhouse
1个回答
1
投票

您可以使用像这样的窗口函数来对间隙和岛屿进行分组:

with cte as (
select * 
 , rank() over (order by time) - rank() over(partition by event order by time ) as grp
from EventLog
)

select min(time) as time, event 
from cte 
group by grp , event
order by time 

输出:

时间 活动
10:30:00 活动1
10:30:05 活动2
10:31:00 活动1
© www.soinside.com 2019 - 2024. All rights reserved.