{"slug":"free-stock-data-api-in-python","qid":"avg_volume_by_ticker","label":"avg_volume_by_ticker","post_title":"free-stock-data-api-in-python","post_url":"/blog/free-stock-data-api-in-python#q-avg_volume_by_ticker","columns":["ticker","avg_20d_millions","first_session","last_session"],"rows":[{"ticker":"NVDA","avg_20d_millions":129.8,"first_session":"2026-08-20","last_session":"2026-09-17"},{"ticker":"AAPL","avg_20d_millions":41.2,"first_session":"2026-08-20","last_session":"2026-09-17"},{"ticker":"SPY","avg_20d_millions":39.8,"first_session":"2026-08-20","last_session":"2026-09-17"},{"ticker":"MSFT","avg_20d_millions":20.1,"first_session":"2026-08-20","last_session":"2026-09-17"}],"shape":"series","sql":"SELECT\n    ticker,\n    round(avg(vol) / 1e6, 1)   AS avg_20d_millions,\n    toString(min(d))           AS first_session,\n    toString(max(d))           AS last_session\nFROM\n(\n    SELECT\n        ticker,\n        d,\n        vol,\n        row_number() OVER (PARTITION BY ticker ORDER BY d DESC) AS rn\n    FROM\n    (\n        SELECT\n            ticker,\n            date                    AS d,\n            toFloat64(max(volume))  AS vol\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker IN ('SPY', 'NVDA', 'AAPL', 'MSFT')\n          AND date >= today() - 45\n          AND date <  today()\n        GROUP BY ticker, date\n    )\n)\nWHERE rn <= 20\nGROUP BY ticker\nHAVING count() = 20\nORDER BY avg_20d_millions DESC","computed_at":"2026-09-18T14:57:26.228497+00:00","elapsed":0.488159019}