我有以下数据:
---------------------------------------------------------
| 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 | |
目标是根据iduser、access\u time、iplog知道用户日志的次数(sessionx)。遵循以下规则:
如果新会话的访问间隔超过30分钟(>30分钟),但具有相同的iplog,则新会话增加(+1)
如果用户对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 |
1条答案
按热度按时间kokeuurv1#
输出
演示
http://sqlfiddle.com/#!9/44063e/42号