MySQL按时间段分组
我有一个具有以下架构的活动日志:MySQL按时间段分组,mysql,Mysql,我有一个具有以下架构的活动日志: visitor_id, metadata, timestamp 第一个字段是访问者id,第二个字段是给定活动的元数据,最后一个字段是活动发生时的unix时间戳 现在,我想从这个日志中识别各个会话。就是,;我想为每个访问者分组所有行,其中时间戳与前一行或后一行的时间间隔不超过x秒,例如20*60,持续20分钟 如何做到这一点?您可以创建如下自定义组: SELECT t.visitor_id, MIN(t.timestamp), MAX(t
visitor_id, metadata, timestamp
第一个字段是访问者id,第二个字段是给定活动的元数据,最后一个字段是活动发生时的unix时间戳
现在,我想从这个日志中识别各个会话。就是,;我想为每个访问者分组所有行,其中时间戳与前一行或后一行的时间间隔不超过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中做会更好。您需要按访问者和时间戳排序,否则,您的时间戳将根据个人情况错误地继续跨越同一访问者。。。至少这是我在原帖中解释的内容。@DRapp是的,谢谢你。它还需要在用户更改时启动一个新组。。。