Friends,
Сценарий связан с файлом журнала контроллеров Wi-Fi, в котором активность пользователей отслеживается, например, когда пользователь "присоединяется", "in", отключается от "и" уходит "из сети Wi-Fi. IЯ очистил и загрузил структурированные данные в таблицу. Я хочу создать идентификаторы сеанса на уровне пользователя для его / ее действий. Определил, что один сеанс может быть сгруппирован по всем событиям между событиями "присоединения" и "ухода". Я прикрепилпримеры данных для лучшего понимания.
Некоторые указатели, полезные для создания идентификаторов сеанса:
- новый сеанс для пользователей может быть идентифицирован с помощью события "joins", и конецОбозначается событием «отпуск».
- «разъединение от» и «отпуск» имеют одинаковую временную отметку, поэтому порядок может быть случайным, если упорядочен по отметке времени.
- для каждого «отсоединения от» естьзапись для «отпуска», но не наоборот. Поэтому мы можем «оставить» без «отсоединения от» записей.
- «в» означает роуминг, поэтому должно быть pискусство той же сессии.Это будет между «соединениями» и «уходом» событий.
- вы можете видеть записи, имеющие только «in» или сказать «отключение от» только потому, что полный файл журнала не был доступен, все же хотите пометить их какдругой идентификатор сеанса.
Пожалуйста, помогите мне создать идентификатор сеанса с учетом заданных указателей.Ниже приведены примеры данных с несколькими возможными сценариями для лучшего понимания того, что я ищу.«Необходимые данные» были назначены с фиктивными идентификаторами сеанса, вот как это должно выглядеть.Отправьте мне для дальнейшего уточнения.Я хочу добиться этого с помощью SQL.
Сценарий 1
необработанные данные:
usermac datetime event
xx:xx:xx:xx:0e:72 2018-04-19 09:30:58.000 joins
xx:xx:xx:xx:0e:72 2018-04-19 09:51:54.000 in
xx:xx:xx:xx:0e:72 2018-04-19 09:51:54.000 in
xx:xx:xx:xx:0e:72 2018-04-19 12:01:39.000 disconnects from
xx:xx:xx:xx:0e:72 2018-04-19 12:01:39.000 leave
xx:xx:xx:xx:0e:72 2018-04-19 12:46:05.000 joins
xx:xx:xx:xx:0e:72 2018-04-19 15:27:28.000 disconnects from
xx:xx:xx:xx:0e:72 2018-04-19 15:27:28.000 leave
требуемый формат:
usermac datetime event sessionid
xx:xx:xx:xx:0e:72 2018-04-19 09:30:58.000 joins 1
xx:xx:xx:xx:0e:72 2018-04-19 09:51:54.000 in 1
xx:xx:xx:xx:0e:72 2018-04-19 09:51:54.000 in 1
xx:xx:xx:xx:0e:72 2018-04-19 12:01:39.000 disconnects from 1
xx:xx:xx:xx:0e:72 2018-04-19 12:01:39.000 leave 1
xx:xx:xx:xx:0e:72 2018-04-19 12:46:05.000 joins 2
xx:xx:xx:xx:0e:72 2018-04-19 15:27:28.000 disconnects from 2
xx:xx:xx:xx:0e:72 2018-04-19 15:27:28.000 leave 2
Сценарий 2
необработанные данные:
usermac datetime event
xx:xx:xx:xx:xx:80 2018-04-12 21:35:48.000 joins
xx:xx:xx:xx:xx:80 2018-04-12 21:40:01.000 leave
xx:xx:xx:xx:xx:80 2018-04-12 21:40:01.000 disconnects from
xx:xx:xx:xx:xx:80 2018-04-12 21:40:08.000 joins
xx:xx:xx:xx:xx:80 2018-04-12 21:43:45.000 leave
xx:xx:xx:xx:xx:80 2018-04-12 21:43:45.000 disconnects from
xx:xx:xx:xx:xx:80 2018-04-12 21:44:00.000 joins
xx:xx:xx:xx:xx:80 2018-04-12 22:01:29.000 leave
требуемый формат:
usermac datetime event sessionid
xx:xx:xx:xx:xx:80 2018-04-12 21:35:48.000 joins 3
xx:xx:xx:xx:xx:80 2018-04-12 21:40:01.000 leave 3
xx:xx:xx:xx:xx:80 2018-04-12 21:40:01.000 disconnects from 3
xx:xx:xx:xx:xx:80 2018-04-12 21:40:08.000 joins 4
xx:xx:xx:xx:xx:80 2018-04-12 21:43:45.000 leave 4
xx:xx:xx:xx:xx:80 2018-04-12 21:43:45.000 disconnects from 4
xx:xx:xx:xx:xx:80 2018-04-12 21:44:00.000 joins 5
xx:xx:xx:xx:xx:80 2018-04-12 22:01:29.000 leave 5
Сценарий 3
необработанные данные:
usermac datetime event
xx:xx:xx:xx:xx:92 2018-04-23 09:15:18.000 joins
xx:xx:xx:xx:xx:92 2018-04-23 11:02:30.000 in
xx:xx:xx:xx:xx:92 2018-04-23 11:02:30.000 in
xx:xx:xx:xx:xx:92 2018-04-23 11:06:09.000 disconnects from
xx:xx:xx:xx:xx:92 2018-04-23 11:06:09.000 leave
xx:xx:xx:xx:xx:92 2018-04-23 11:07:03.000 joins
xx:xx:xx:xx:xx:92 2018-04-23 13:35:51.000 leave
требуемый формат:
usermac datetime event sessionid
xx:xx:xx:xx:xx:92 2018-04-23 09:15:18.000 joins 6
xx:xx:xx:xx:xx:92 2018-04-23 11:02:30.000 in 6
xx:xx:xx:xx:xx:92 2018-04-23 11:02:30.000 in 6
xx:xx:xx:xx:xx:92 2018-04-23 11:06:09.000 disconnects from 6
xx:xx:xx:xx:xx:92 2018-04-23 11:06:09.000 leave 6
xx:xx:xx:xx:xx:92 2018-04-23 11:07:03.000 joins 7
xx:xx:xx:xx:xx:92 2018-04-23 13:35:51.000 leave 7
Сценарий 4
необработанные данные:
usermac datetime event
xx:xx:xx:xx:xx:5f 2018-06-23 07:03:24.000 disconnects from
xx:xx:xx:xx:xx:5f 2018-06-23 07:03:24.000 leave
xx:xx:xx:xx:xx:5f 2018-06-23 07:05:45.000 joins
xx:xx:xx:xx:xx:5f 2018-06-23 07:05:48.000 leave
xx:xx:xx:xx:xx:5f 2018-06-23 07:05:48.000 disconnects from
xx:xx:xx:xx:xx:5f 2018-06-23 07:31:59.000 joins
xx:xx:xx:xx:xx:5f 2018-06-23 07:32:02.000 leave
xx:xx:xx:xx:xx:5f 2018-06-23 07:32:02.000 disconnects from
требуемый формат:
usermac datetime event sessionid
xx:xx:xx:xx:xx:5f 2018-06-23 07:03:24.000 disconnects from 8
xx:xx:xx:xx:xx:5f 2018-06-23 07:03:24.000 leave 8
xx:xx:xx:xx:xx:5f 2018-06-23 07:05:45.000 joins 9
xx:xx:xx:xx:xx:5f 2018-06-23 07:05:48.000 leave 9
xx:xx:xx:xx:xx:5f 2018-06-23 07:05:48.000 disconnects from 9
xx:xx:xx:xx:xx:5f 2018-06-23 07:31:59.000 joins 10
xx:xx:xx:xx:xx:5f 2018-06-23 07:32:02.000 leave 10
xx:xx:xx:xx:xx:5f 2018-06-23 07:32:02.000 disconnects from 10
Сценарий 5
необработанные данные:
usermac datetime event
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:14.000 in
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:14.000 in
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:40.000 in
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:40.000 in
xx:xx:xx:xx:xx:b2 2018-06-12 07:23:39.000 leave
требуемый формат:
usermac datetime event sessionid
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:14.000 in 11
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:14.000 in 11
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:40.000 in 11
xx:xx:xx:xx:xx:b2 2018-06-12 07:22:40.000 in 11
xx:xx:xx:xx:xx:b2 2018-06-12 07:23:39.000 leave 11
Сценарий 6
необработанные данные:
usermac datetime event
xx:xx:xx:xx:xx:16 2018-06-23 07:55:26.000 in
xx:xx:xx:xx:xx:16 2018-06-23 07:55:26.000 in
требуемый формат:
usermac datetime event sessionid
xx:xx:xx:xx:xx:16 2018-06-23 07:55:26.000 in 12
xx:xx:xx:xx:xx:16 2018-06-23 07:55:26.000 in 12
Сценарий 7
необработанные данные:
usermac datetime event
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:30.000 rejoins
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:51.000 rejoins
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:59.000 leave
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:59.000 disconnects from
xx:xx:xx:xx:xx:m6 2018-06-24 06:57:03.000 joins
требуемый формат:
usermac datetime event sessionid
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:30.000 rejoins 13
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:51.000 rejoins 13
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:59.000 leave 13
xx:xx:xx:xx:xx:m6 2018-06-24 06:56:59.000 disconnects from 13
xx:xx:xx:xx:xx:m6 2018-06-24 06:57:03.000 joins 14
То, что пытались до сих пор:
with cte1 as
(
SELECT row_number() over(partition by usermac
ORDER BY datetime) indexno,
row_number() over(partition by event
ORDER BY usermac, datetime) sessionid, datetime, usermac, event
from t8_wfc_log_apr_jun_syslog_cast where usermac='xx:xx:xx:xx:16' order by usermac, datetime
)
SELECT case when event = 'joins' then
sessionid
else
(select max(sessionid) from cte1 innie where innie.usermac = oute.usermac and innie.indexno < oute.indexno and innie.event = 'joins') end sessionid,
datetime,
usermac,
event
FROM cte1 oute order by usermac, datetime;