我有一个活动日志,其中包含以下架构:
visitor_id, metadata, timestamp
第一个字段是访问者ID,第二个字段是给定活动的元数据,最后一个是活动发生时的unix时间戳。
现在,我想从此日志中识别单个会话。那是;我想为每个访问者分组所有行,其中时间戳不再相隔x秒(例如,20 * 60,持续20分钟),来自同一访问者的前一行或后一行。
怎么办呢?
答案 0 :(得分:0)
您可以创建类似自定义组的内容:
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