{"slug":"market-recap-week-2026-06-29","qid":"week_sessions","label":"Session by session: SPY close, change, and full-day volume","post_title":"Market Recap: Week of June 29, 2026","post_url":"/blog/market-recap-week-2026-06-29#q-week_sessions","columns":["et_date","spy_close","change_pct","shares_m"],"rows":[{"et_date":"2026-06-29","spy_close":740.88,"change_pct":1.6,"shares_m":55.6},{"et_date":"2026-06-30","spy_close":746.32,"change_pct":0.7,"shares_m":51.7},{"et_date":"2026-07-01","spy_close":745.69,"change_pct":-0.1,"shares_m":45.4},{"et_date":"2026-07-02","spy_close":744.8,"change_pct":-0.1,"shares_m":55.4}],"shape":"series","sql":"SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,\n    round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS spy_close,\n    round((argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / any(prev) - 1) * 100, 1) AS change_pct,\n    round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m\nFROM global_markets.delayed_stocks_minute_aggs\nINNER JOIN (\n    SELECT d, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev\n    FROM (\n        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS c\n        FROM global_markets.delayed_stocks_minute_aggs\n        WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')\n        GROUP BY d\n    )\n) AS p ON toDate(toTimeZone(window_start, 'America/New_York')) = p.d\nWHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')\nGROUP BY et_date\nORDER BY et_date","computed_at":"2026-07-26T06:04:57.702066+00:00","elapsed":0.096596488}