我有一个具有以下架构的事件日志:
visitor_id, metadata, timestamp
第一个字段是访问者 ID,第二个字段是给定事件的一些元数据,最后一个字段是事件发生时的 unix 时间戳。
现在,我想从此日志中识别各个 session 。那是;我想对每个访问者的所有行进行分组,其中时间戳与同一访问者的前一行或后一行的时间戳不再相隔 x 秒(例如 20*60 为 20 分钟)。
如何才能做到这一点?
最佳答案
您可以创建类似于自定义组的内容,如下所示:
SELECT
t.visitor_id,
MIN(t.timestamp),
MAX(t.timestamp)
FROM (
SELECT
IF(@lt < l.`timestamp` - 60*20 OR l.visitor_id != @lv, @g := @g + 1, @g) as g,
@lv := l.visitor_id,
@lt := l.`timestamp`,
l.*
FROM your_log l
JOIN (SELECT @g := 1, @lt = 0, @lv = NULL) as init
ORDER BY l.visitor_id, l.`timestamp`
) as t
GROUP BY t.visitor_id, g
关于MySQL按时间段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284482/