fantasySolana Deactivation Pattern
    Updated 2025-04-23
    WITH user_activity AS (
    SELECT
    signer,
    first_tx_date,
    last_tx_date,
    DATEDIFF('day', first_tx_date, last_tx_date) AS active_days,
    DATEDIFF('day', last_tx_date, CURRENT_DATE) AS days_since_last_active,
    programs_used
    FROM
    solana.core.ez_signers
    ),
    churn_buckets AS (
    SELECT
    signer,
    active_days,
    programs_used,
    CASE
    WHEN active_days = 0 THEN 'One-and-done (0d)'
    WHEN active_days < 7 THEN 'Churned Early (7d)'
    WHEN active_days < 30 THEN 'Churned Mid (30d)'
    WHEN active_days < 60 THEN 'Churned Late (60D)'
    WHEN active_days < 90 THEN 'Almost retained (90d)'
    ELSE 'Long-term User (90d+)'
    END AS churn_pattern
    FROM
    user_activity
    WHERE
    days_since_last_active > 14 -- considered churned
    )

    SELECT
    churn_pattern,
    COUNT(DISTINCT signer) AS user_count,
    ROUND(COUNT(DISTINCT signer) * 100.0 / SUM(COUNT(DISTINCT signer)) OVER (), 2) AS percent_of_total
    FROM
    churn_buckets
    Last run: about 1 month ago
    CHURN_PATTERN
    USER_COUNT
    PERCENT_OF_TOTAL
    1
    One-and-done (0d)158379830394.42
    2
    Churned Early (7d)335994152
    3
    Churned Mid (30d)220263761.31
    4
    Long-term User (90d+)211316751.26
    5
    Churned Late (60D)112073580.67
    6
    Almost retained (90d)56828000.34
    6
    226B
    88s