2013-11-29 3 views
0

у меня есть журнал активности со следующей схемой:группа MySQL по времени ведер

visitor_id, metadata, timestamp 

Первое поле идентификатор посетители, второй некоторые метаданные для данного вида деятельности, а последняя отметка времени Unix от момента, когда активность.

Теперь я хочу идентифицировать отдельные сеансы из этого журнала. То есть; Я хочу сгруппировать все строки для каждого посетителя, где временная метка больше не равна x секунд (например, 20 * 60 в течение 20 минут) из предыдущей или следующей строки одним и тем же посетителем.

Как это можно сделать?

+0

Это, вероятно, будет лучше сделать это в логике приложения. – Vatev

+0

Я думаю, что будет лучше сделать это в MySQL – Strawberry

ответ

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 
+0

вам нужно будет заказать посетитель И отметка времени, иначе ваша временная метка, пересекающая одного посетителя, будет ложно продолжаться на основе индивидуального лица ... По крайней мере, это то, что я интерпретирую из оригинальный пост. – DRapp

+0

@DRapp yep, спасибо за это. Также необходимо запустить новую группу, когда пользователь изменит ... – Vatev

Смежные вопросы