{"slug":"market-recap-week-2026-07-20","qid":"week_sessions","label":"SPY by session: close, change, and share volume, July 20-24","post_title":"Market Recap: Week of July 20, 2026","post_url":"/blog/market-recap-week-2026-07-20#q-week_sessions","columns":["date","spy_close","change_pct","spy_shares_m"],"rows":[{"date":"2026-07-20","spy_close":742.1,"change_pct":-0.15,"spy_shares_m":40.1},{"date":"2026-07-21","spy_close":748.32,"change_pct":0.84,"spy_shares_m":25.6},{"date":"2026-07-22","spy_close":747.39,"change_pct":-0.12,"spy_shares_m":26.6},{"date":"2026-07-23","spy_close":738.24,"change_pct":-1.22,"spy_shares_m":48},{"date":"2026-07-24","spy_close":738.85,"change_pct":0.08,"spy_shares_m":40.1}],"shape":"series","sql":"SELECT toString(d) AS date,\n       round(c, 2) AS spy_close,\n       round((c / prev_c - 1) * 100, 2) AS change_pct,\n       round(shares_m, 1) AS spy_shares_m\nFROM (\n    SELECT d, c, shares_m,\n           lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c\n    FROM (\n        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n               argMax(toFloat64(close), window_start) AS c,\n               toFloat64(sum(volume)) / 1e6 AS shares_m\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker = 'SPY'\n          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')\n            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))\n          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199\n        GROUP BY d\n    )\n)\nWHERE d >= '2026-07-20'\nORDER BY date","computed_at":"2026-08-12T14:47:56.677318+00:00","elapsed":0.002853588}