我有以下数据:
--------------------------------------------------------- | IDUSER | ACCESS_TIME | IPLOG | SESSIONX | --------------------------------------------------------- |1 | 2018-02-05 04:01:17 | 1.2.3.4 | | |1 | 2018-02-05 04:05:00 | 1.2.3.4 | | |1 | 2018-02-05 04:40:00 | 1.2.3.4 | | |1 | 2018-02-05 07:00:14 | 1.2.3.4 | | |1 | 2018-02-05 07:50:14 | 1.2.3.5 | | |2 | 2018-02-05 08:20:20 | 1.2.3.5 | | |2 | 2018-02-05 08:35:00 | 1.2.3.5 | | |2 | 2018-02-05 08:45:20 | 1.2.3.6 | | |2 | 2018-02-05 09:35:00 | 1.2.3.6 | |
目标是知道多少次(SESSIONX) 用户日志基于IDUSER,ACCESS_TIME,IPLOG。 遵守以下规则:
新会话增加(+1)如果每隔30分钟(> 30分钟)访问一次,但使用相同的iplog
如果使用iplog的用户访问权限不同(新),即使不到30分钟(<30分钟) 从上一次开始计算新会话(+1)。
如何使用上述规则查询会话时间序列? ,所以输出如下
--------------------------------------------------------- | IDUSER | ACCESS_TIME | IPLOG | SESSIONX | --------------------------------------------------------- |1 | 2018-02-05 04:01:17 | 1.2.3.4 | 1 | |1 | 2018-02-05 04:05:00 | 1.2.3.4 | 1 | |1 | 2018-02-05 04:40:00 | 1.2.3.4 | 2 | |1 | 2018-02-05 07:00:14 | 1.2.3.4 | 3 | |1 | 2018-02-05 07:50:14 | 1.2.3.5 | 4 | |2 | 2018-02-05 08:20:20 | 1.2.3.5 | 1 | |2 | 2018-02-05 08:35:00 | 1.2.3.5 | 1 | |2 | 2018-02-05 08:45:20 | 1.2.3.6 | 2 | |2 | 2018-02-05 09:35:00 | 1.2.3.6 | 3 |
答案 0 :(得分:0)
SELECT IDUSER,
ACCESS_TIME,
IPLOG,
SESSIONX
FROM
(SELECT
T.IDUSER,
T.ACCESS_TIME,
T.IPLOG,
TIMESTAMPDIFF(MINUTE,@date,T.ACCESS_TIME),
CASE WHEN @id != T.IDUSER THEN @num := 1 END,
CASE WHEN @iplog != T.IPLOG OR TIMESTAMPDIFF(MINUTE,@date,T.ACCESS_TIME) > 30
THEN @num := @num + 1
ELSE
@num
END AS SESSIONX,
@date := T.ACCESS_TIME AS VarDate,
@id := T.IDUSER AS VarIDUSER,
@iplog := T.IPLOG AS VarIPLOG
FROM
Table1 T,(SELECT @num := 1,@date := null,@id := null,@iplog := null) R)T1
<强>输出强>
IDUSER ACCESS_TIME IPLOG SESSIONX
1 2018-02-05T04:01:17Z 1.2.3.4 1
1 2018-02-05T04:05:00Z 1.2.3.4 1
1 2018-02-05T04:40:00Z 1.2.3.4 2
1 2018-02-05T07:00:14Z 1.2.3.4 3
1 2018-02-05T07:50:14Z 1.2.3.5 4
2 2018-02-05T08:20:20Z 1.2.3.5 1
2 2018-02-05T08:35:00Z 1.2.3.5 1
2 2018-02-05T08:45:20Z 1.2.3.6 2
2 2018-02-05T09:35:00Z 1.2.3.6 3
<强>演示强>