2013-06-27 62 views
1

我有一个包含会话事件时间戳的表。 我想根据时间戳来查询两次会话之间至少有10分钟的事件差异。 我可以使用MySql查询来计算会话吗?按时间段分组的MySQL结果

感谢

+1

你能证明你的表结构。一些数据。请问您已经尝试过的查询? –

+0

首先,是的,这是可能的,但你的问题是模糊地告诉什么是一个好方法。其次,从您的“10分钟事件差异”给出,我嗅到用户不活动后自动注销的要求?这可以解决而不会损害数据库 – Najzero

+0

它不是一个真正的自动注销,但如果用户空闲了10分钟,这表明有两个单独的活动 – Ulile

回答

2

随着对你的表一点信息,这是没有比你一个基本的想法更多,但你可以做这样的事情: -

SELECT COUNT(*) 
FROM 
(
    SELECT a.TimeStamp AS ThisTimeStamp, MIN(b.TimeStamp) AS NextTimeStamp 
    FROM SomeTable a 
    INNER JOIN SomeTable b 
    ON a.TimeStamp < b.TimeStamp 
    GROUP BY a.TimeStamp 
) Sub1 
WHERE Sub1.ThisTimeStamp < (Sub1.NextTimeStamp - 600) 

获取所有的时间戳和他们一起反对所有其他更大的时间戳,并使用MIN将其缩小到下一个最大的时间戳。然后从中选择差值小于600秒的计数(假设为unix时间戳)。

编辑 - 如果你想拴住了10分钟+空白事件的用户则数量: -

SELECT COUNT(*) 
FROM 
(
    SELECT a.user_id, a.TimeStamp AS ThisTimeStamp, MIN(b.TimeStamp) AS NextTimeStamp 
    FROM SomeTable a 
    INNER JOIN SomeTable b 
    ON a.TimeStamp < b.TimeStamp 
    AND a.user_id = b.user_id 
    GROUP BY a.user_id, a.TimeStamp 
) Sub1 
WHERE Sub1.ThisTimeStamp < (Sub1.NextTimeStamp - 600) 
+0

谢谢, 该表具有event_id(bigint),event_date( datetime),user_id(bigint),event_content(varchar)。 我需要统计至少10分钟的事件组数量。 – Ulile

+0

什么定义了一个事件组?只是user_id?如果是这样,我添加了编辑 – Kickstart

+0

是的,它只是用户标识。然而,我试图运行这个查询,它不返回... – Ulile