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

image.png

Raw data

ring_activations.csv

user_sessions.csv

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