PlaywoBalances
    Updated 2023-07-20
    WITH microstrategy_addresses AS (
    SELECT $1 AS address
    FROM (VALUES
    ('1FzWLkAahHooV3kzTgyx6qsswXJ6sCXkSR'),
    ('1JHceFenZHACSRPD6tE4bfU6yJ83wTG6kH'),
    ('1LQoWist8KkaUXSPKZHNvEyfrEkPHzSsCd'),
    ('1P5ZEDWTKTFGxQjZphgWPQUpe554WKDfHQ'),
    ('bc1qhk0ghcywv0mlmcmz408sdaxudxuk9tvng9xx8g'),
    ('bc1ql49ydapnjafl5t2cp9zqpjwe6pdgmxy98859v2'),
    ('bc1qmxcagqze2n4hr5rwflyfu35q90y22raxdgcp4p')
    )
    ),
    out_movements AS (
    SELECT TRUNC(block_timestamp, 'day') AS date,
    sum(value) AS total_value
    FROM bitcoin.core.fact_inputs
    WHERE pubkey_script_address IN (SELECT * FROM microstrategy_addresses)
    GROUP BY date
    ),
    in_movements AS (
    SELECT TRUNC(block_timestamp, 'day') AS date,
    sum(value) AS total_value
    FROM bitcoin.core.fact_outputs
    WHERE pubkey_script_address IN (SELECT * FROM microstrategy_addresses)
    GROUP BY date
    ),
    timeframe AS (
    SELECT date_day AS date
    FROM crosschain.core.dim_dates
    WHERE date_day >= (SELECT min(date) FROM in_movements) AND date_day <= CURRENT_DATE
    )

    SELECT t.date, NVL(i.total_value, 0) - NVL(o.total_value, 0) AS movement,
    sum(movement) OVER (ORDER BY t.date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS balance
    FROM timeframe t
    LEFT JOIN out_movements o ON o.date = t.date
    Run a query to Download Data