purifCubquest - New and returning users daily
    Updated 2024-10-07
    --new and returning users, either like below based on days, or based on badge_id
    --badge_id makes sense but isn't as accurate as users are free to claim badges in any order
    with activity as (
    select date_trunc('day', block_timestamp) as day, decoded_log['id'] as badge_id, decoded_log['to'] as minter from berachain.testnet.fact_decoded_event_logs
    where CONTRACT_ADDRESS=lower('0x886D2176D899796cD1AfFA07Eff07B9b2B80f1be')
    and decoded_log['from']=lower('0x0000000000000000000000000000000000000000')
    ),
    new_wallets AS (
    select first_transaction as time, count(minter) as new_users from (
    SELECT
    minter,
    MIN(day) AS first_transaction
    FROM activity
    GROUP BY 1
    )
    GROUP BY 1
    ),
    stats AS (
    SELECT
    date_trunc('day', block_timestamp) as day, count( distinct decoded_log['to'] ) as unique_wallets
    FROM berachain.testnet.fact_decoded_event_logs
    where CONTRACT_ADDRESS=lower('0x886D2176D899796cD1AfFA07Eff07B9b2B80f1be')
    and decoded_log['from']=lower('0x0000000000000000000000000000000000000000')
    GROUP BY 1
    )
    select day, new_users, returning_users,
    avg(new_users+returning_users) over (order by day) as average_users,
    sum(new_users+returning_users) over (order by day) as cum_users
    from (
    SELECT
    s.day,
    COALESCE(new_users,0) AS new_users,
    unique_wallets-COALESCE(new_users,0) AS returning_users
    FROM stats s
    LEFT JOIN new_wallets nw on s.day=nw.time
    QueryRunArchived: QueryRun has been archived