MySQL组由时间桶组成

时间:2013-11-29 11:15:51

标签: mysql

我有一个活动日志,其中包含以下架构:

visitor_id, metadata, timestamp

第一个字段是访问者ID,第二个字段是给定活动的元数据,最后一个是活动发生时的unix时间戳。

现在,我想从此日志中识别单个会话。那是;我想为每个访问者分组所有行,其中时间戳不再相隔x秒(例如,20 * 60,持续20分钟),来自同一访问者的前一行或后一行。

怎么办呢?

1 个答案:

答案 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