我已经订购了包含活动的桌子,有他们的时间(在 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 |
您可以使用像这样的窗口函数来对间隙和岛屿进行分组:
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 |