Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- with t1 as (
- SELECT *,
- lag(timestamp) over(partition by user_id order by timestamp) as timestamp_lag,
- if(TIMESTAMP_DIFF(timestamp, lag(timestamp) over(partition by user_id order by timestamp),minute)<30,0,1) as session_start
- FROM `table_name`
- ), t2 as (
- select *,
- sum(session_start) over(partition by user_id order by timestamp) as session_number
- from t1
- ), t3 as (
- select *,
- concat(user_id,'_',cast(session_number as string)) as session_id,
- min(timestamp) over(partition by user_id, session_number) as start_session_time,
- max(timestamp) over(partition by user_id, session_number) as end_session_time
- from t2
- )
- select user_id, session_id, start_session_time, end_session_time
- from t3
- group by 1,2,3,4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement