Skip to content

Instantly share code, notes, and snippets.

@mshakhomirov
Created November 24, 2022 15:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mshakhomirov/05fd7d79d8acf3b173181a5d950ab6e7 to your computer and use it in GitHub Desktop.
Save mshakhomirov/05fd7d79d8acf3b173181a5d950ab6e7 to your computer and use it in GitHub Desktop.
with d as (
select * from unnest([
struct('0003f' as user_pseudo_id, 12322175 as user_id, timestamp '2020-10-10 16:46:59.878 UTC' as event_timestamp, 'join_group' as event_name),
('0003',12,timestamp '2022-10-10 16:50:03.394 UTC','set_avatar'),
('0003',12,timestamp '2022-10-10 17:02:38.632 UTC','set_avatar'),
('0003',12,timestamp '2022-10-10 17:09:38.645 UTC','set_avatar'),
('0003',12,timestamp '2022-10-10 17:10:38.645 UTC','join_group'),
('0003',12,timestamp '2022-10-10 17:15:38.645 UTC','create_group'),
('0003',12,timestamp '2022-10-10 17:17:38.645 UTC','create_group'),
('0003',12,timestamp '2022-10-10 17:18:38.645 UTC','in_app_purchase'),
('0003',12,timestamp '2022-10-10 17:19:38.645 UTC','spend_virtual_currency'),
('0003',12,timestamp '2022-10-10 17:19:45.645 UTC','create_group'),
('0003',12,timestamp '2022-10-10 17:20:38.645 UTC','set_avatar')
]
) as t)
, event_data as (
SELECT
user_pseudo_id
, user_id
, event_timestamp
, event_name
, ARRAY_AGG(
STRUCT(
event_name AS event_name
, event_timestamp AS event_timestamp
)
)
OVER(PARTITION BY user_pseudo_id ORDER BY event_timestamp ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ) as next_events
FROM d
WHERE
DATE(event_timestamp) = "2022-10-10"
)
select
user_pseudo_id
, user_id
, event_timestamp
, event_name
, (SELECT
event_name FROM UNNEST(next_events) next_event
WHERE t.event_name != event_name
ORDER BY event_timestamp LIMIT 1
-- change to ORDER BY event_timestamp desc if prev event needed
) next_event
, (SELECT
event_timestamp FROM UNNEST(next_events) next_event
WHERE t.event_name != event_name
ORDER BY event_timestamp LIMIT 1
-- change to ORDER BY event_timestamp desc if prev event needed
) next_event_ts
from event_data t
;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment