Я пытаюсь выполнить sql-запрос, который создаст группы в заказе, основываясь на том, будет ли следующая строка на 0,01 секунды позже.
Для проекта, над которым я работаю, у меня есть фиктивные данные со временемсотовый телефон был проверен во время различных приложений.Мы должны рассчитать различные метрики, и если телефон не пингуется в течение нескольких секунд, это должна быть другая группа.
![enter image description here](https://i.stack.imgur.com/cpmxw.png)
SELECT APP_ID,
Session_id,
Phone_id,
Time_pinged,
LAG(Time_pinged,1)
OVER(PARTITION BY App_id, Session_id, Phone_id order by Time_pinged) as Lag_time,
LEAD(Time_pinged,1)
OVER(PARTITION BY App_id, Session_id, Phone_id order by Time_pinged) as Lead_time
FROM Mydataset.app_data
Iя пытаюсь добавить еще одну «группировку» в этот запрос, чтобы учесть, что сеанс теряет соединения на несколько миллисекунд, поэтому, хотя последние 2 строки находятся в одном и том же session_id, он потерял соединение на миллисекунду, поэтому должно быть 2 уникальные группыв этом сеансе.
Я пытаюсь выяснить, как сделать оператор case, где я мог бы создать другую группировку в Session_id (для данного приложения / пользователя) на основе этой формулы: lead (time_pinged, 1) -time_pinged! = .01
Моей первоначальной мыслью было создание начальных / конечных «окон», которые бы говорили: If: time_pinged - lag(time_pinged,1) != .01
-> start frame And case lead(time_pinged,1) - time_pinged != .01
-> end frame.Теперь я не думаю, что мне нужны оба этих случая, потому что, если я знаю конечные кадры, я знаю начальные кадры, но я не уверен.
Большое спасибо.