所以基本上我在 MySQL :
中有一个表+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| ID | int(11) | NO | | NULL | |
| Query | text | YES | | NULL | |
| timestamp | datetime | YES | | NULL | |
+-----------+----------+------+-----+---------+-------+
ID表示用户ID,查询表示他给机器的查询和他给出的时间戳。我试图通过检查表的每个记录并将当前时间戳与前一个时间戳进行比较来查找用户可以与机器进行的会话。如果差异低于300秒的阈值,那么我认为它是一个会话。
但是,这种方式我没有考虑到同一个用户可能多次使用该机器。如何检查以前的ID是否与我正在检查的记录的当前ID相同?
我一直在网上搜索,这是我到目前为止所提出的。
select Count(*) from(
select t.*,
TIMESTAMPDIFF(second, @prevQT, `timestamp`) as session,
@prevQT:=t.`timestamp`
from myTable t,
(select @prevQT:=(Select min(`timestamp`) from myTable)) vars
ORDER BY ID) subquery_alias
where session < 300;
提前谢谢。
更新
示例数据:
1 , "google" , '2013-08-02 08:58:06'
1 , "dogs" , '2013-08-02 09:00:09'
1 , "dogs and cats" , '2013-08-02 09:02:02'
1 , "toys" , '2013-08-02 09:10:09'
1 , "games for kids", '2013-08-02 09:12:25'
2 , "football" , '2013-08-02 09:12:28'
2 , "manchester" , '2013-08-02 09:14:37'
2 , "championship" , '2013-08-02 09:17:48'
3 , "flowers" , '2013-08-02 09:20:31'
对其应用查询,结果应为4,因为ID为1的用户使用机器两次,时间差超过5分钟。