SQL Запрос на создание идентификатора сеанса - PullRequest
0 голосов
/ 07 февраля 2020
DeviceID    TimeStamp          EventType
1   2020-01-01 01:00:00.000  Arrival Event
1   2020-01-01 01:00:02.000  Departure Event
1   2020-01-01 02:00:02.000  Arrival Event
1   2020-01-01 02:00:05.000  Departure Event
1   2020-01-01 03:00:05.000  Arrival Event
1   2020-01-01 03:00:05.000  ActivityI
1   2020-01-01 03:00:05.000  ActivityI
1   2020-01-01 03:00:19.000  Departure Event
1   2020-01-01 04:00:19.000  Arrival Event
1   2020-01-01 04:00:20.000  Departure Event
1   2020-01-01 05:00:20.000  Arrival Event
1   2020-01-01 05:00:20.000  ActivityI
1   2020-01-01 05:00:20.000  ActivityI
1   2020-01-01 05:00:30.000  Departure Event
1   2020-01-01 06:00:30.000  Arrival Event
1   2020-01-01 06:00:33.000  Departure Event

У меня есть вышеуказанные данные. Каждое событие начинается с прибытия и заканчивается отъездом. Я хочу создать сессионный / транзакции для каждого прибытия. как мне это сделать в sql?

ожидаемый результат

DeviceID    TimeStamp          EventType               SessionID
1   2020-01-01 01:00:00.000  Arrival Event                 1
1   2020-01-01 01:00:02.000  Departure Event               1
1   2020-01-01 02:00:02.000  Arrival Event                 2
1   2020-01-01 02:00:05.000  Departure Event               2
1   2020-01-01 03:00:05.000  Arrival Event                 3
1   2020-01-01 03:00:05.000  ActivityI                     3
1   2020-01-01 03:00:05.000  ActivityI                     3
1   2020-01-01 03:00:19.000  Departure Event               3
1   2020-01-01 04:00:19.000  Arrival Event                 4
1   2020-01-01 04:00:20.000  Departure Event               4

Заранее спасибо.

1 Ответ

0 голосов
/ 07 февраля 2020

Вы можете сделать сумму окна, которая увеличивается на 1 для каждого прибытия:

select 
    t.*,
    sum(case when eventType = 'Arrival Event' then 1 else 0 end) 
        over(partition by deviceID order by timestamp) sessionID
from mytable t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...