Для создания идентификатора сеанса с помощью SQL-запроса для пользовательских событий журнала Wi-Fi - PullRequest
0 голосов
/ 10 декабря 2018

Friends,

Сценарий связан с файлом журнала контроллеров Wi-Fi, в котором активность пользователей отслеживается, например, когда пользователь "присоединяется", "in", отключается от "и" уходит "из сети Wi-Fi. IЯ очистил и загрузил структурированные данные в таблицу. Я хочу создать идентификаторы сеанса на уровне пользователя для его / ее действий. Определил, что один сеанс может быть сгруппирован по всем событиям между событиями "присоединения" и "ухода". Я прикрепилпримеры данных для лучшего понимания.

Некоторые указатели, полезные для создания идентификаторов сеанса:

  1. новый сеанс для пользователей может быть идентифицирован с помощью события "joins", и конецОбозначается событием «отпуск».
  2. «разъединение от» и «отпуск» имеют одинаковую временную отметку, поэтому порядок может быть случайным, если упорядочен по отметке времени.
  3. для каждого «отсоединения от» естьзапись для «отпуска», но не наоборот. Поэтому мы можем «оставить» без «отсоединения от» записей.
  4. «в» означает роуминг, поэтому должно быть pискусство той же сессии.Это будет между «соединениями» и «уходом» событий.
  5. вы можете видеть записи, имеющие только «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;

...