WITH profile AS (SELECT p.user_id, MIN(session_start)::date AS first_session_dt FROM online_store.profiles p JOIN online_store.orders o ON p.user_id = o.user_id JOIN online_store.sessions s ON p.user_id = s.user_id GROUP BY 1), ltv AS (SELECT p.user_id, o.revenue, o.event_dt, p.first_session_dt, EXTRACT(DAY FROM AGE(o.event_dt, p.first_session_dt)) AS lifetime, SUM(o.revenue) OVER (PARTITION BY p.user_id ORDER BY o.event_dt) AS ltv FROM profile p JOIN online_store.orders o ON p.user_id = o.user_id) SELECT ltv.lifetime, ROUND(AVG(ltv), 2) AS avg_ltv FROM ltv WHERE ltv.lifetime <= 6 GROUP BY 1 ORDER BY 1;