在clickhouse中,我有一个带有用户id和标记的事件列表。我的目标是从这些数据中提取会话。
会话是一组时间相近的事件。举个例子,如果一个事件比前一个事件晚了半个多小时,那么它就在另一个会话中。但是,如果每15分钟发生一次事件,则会话可以长达12小时。
我查看了timeslot函数的文档,它描述了一个与我类似的用例,但我不知道如何编写查询(https://clickhouse.yandex/docs/en/query_language/functions/date_time_functions/#timeslot)
例如:
活动:
date | user | tag
2018-12-21 00:00:00 │ user1 │ tag1
2018-12-21 00:00:00 │ user2 │ tag1
2018-12-21 00:15:00 │ user1 │ tag1
2018-12-21 00:15:00 │ user2 │ tag2
2018-12-21 00:30:00 │ user1 │ tag1
2018-12-21 00:45:00 │ user1 │ tag1
2018-12-21 01:45:00 │ user1 │ tag1
结果会话:
date | date_end | user | tag | count
2018-12-21 00:00:00 | 2018-12-21 00:45:00 | user1 | tag1 | 4
2018-12-21 00:00:00 | 2018-12-21 00:00:00 | user2 | tag1 | 1
2018-12-21 00:15:00 | 2018-12-21 00:15:00 | user2 | tag2 | 1
2018-12-21 01:45:00 | 2018-12-21 01:45:00 | user1 | tag1 | 1
2条答案
按热度按时间ttygqcqt1#
此查询依赖于将日期四舍五入到半小时的默认时间段函数:
sigwle7e2#