SQL Questions Playlist: https://www.youtube.com/playlist?list=PLGTMkAiTnEDJR9F59CW3M1xGMJ5fZnnpP
Protfolio Projects : https://www.youtube.com/playlist?list=PLGTMkAiTnEDIm3wtHmg_lYYP9lADd6GyC
Case study Frameworks : https://www.youtube.com/playlist?list=PLGTMkAiTnEDIagFrYySUV87WBUCM_gM3P
Setup your analytics infra : https://www.youtube.com/playlist?list=PLGTMkAiTnEDLXNASjx5sXwXREvf54W9tx
Analytics Roadmap: https://www.notion.so/Data-Analytics-Roadmap-26134eb1037480339e20e15575dc7a06
Latest Job openings: https://www.linkedin.com/in/aloktheanalyst/
Question

Raw data
Final Code
-- step 1 - calculate activation month
-- group by user_id min(created_at)
-- get first date of the month from activation date
-- step 2 - sessions each month
-- left join ring activation
-- date diff session_date-activation date
with ring_activations as
(select user_id
,date_trunc(min(created_at),month) as activation_month
from csv.src_ring_activation
group by 1)
,user_session as
(select user_id
,date_trunc(timestamp,month) as session_month
,session_duration
from csv.src_user_session)
,final_base as
(select ring_activations.*
,date_diff(date(user_session.session_month),date(ring_activations.activation_month), month) as month_number
from ring_activations
left join user_session on user_session.user_id=ring_activations.user_id and ring_activations.activation_month<=user_session.session_month)
select activation_month
-- ,month_number
,count(distinct case when month_number=0 then user_id end) as M0
,count(distinct case when month_number=1 then user_id end) as M1
,count(distinct case when month_number=2 then user_id end) as M2
,count(distinct case when month_number=3 then user_id end) as M3
,count(distinct case when month_number=4 then user_id end) as M4
,count(distinct case when month_number=5 then user_id end) as M5
,count(distinct case when month_number=6 then user_id end) as M6
from final_base
group by 1
order by 1