{"slug":"market-recap-2026-h1","qid":"h1_monthly_returns","label":"The half, month by month (SPY and QQQ, recomputed identically in one query)","post_title":"Market Recap: H1 2026","post_url":"/blog/market-recap-2026-h1#q-h1_monthly_returns","columns":["period_start","ticker","month_return_pct","month_close"],"rows":[{"period_start":"2026-01-01","ticker":"QQQ","month_return_pct":0.3,"month_close":621.81},{"period_start":"2026-01-01","ticker":"SPY","month_return_pct":0.9,"month_close":691.85},{"period_start":"2026-02-01","ticker":"QQQ","month_return_pct":-1.8,"month_close":607.45},{"period_start":"2026-02-01","ticker":"SPY","month_return_pct":-0.5,"month_close":686.23},{"period_start":"2026-03-01","ticker":"QQQ","month_return_pct":-3.6,"month_close":577.14},{"period_start":"2026-03-01","ticker":"SPY","month_return_pct":-4.2,"month_close":650.24},{"period_start":"2026-04-01","ticker":"QQQ","month_return_pct":14.8,"month_close":667.6},{"period_start":"2026-04-01","ticker":"SPY","month_return_pct":9.9,"month_close":718.43},{"period_start":"2026-05-01","ticker":"QQQ","month_return_pct":10.3,"month_close":738.25},{"period_start":"2026-05-01","ticker":"SPY","month_return_pct":4.9,"month_close":756.4},{"period_start":"2026-06-01","ticker":"QQQ","month_return_pct":-0.2,"month_close":735.76},{"period_start":"2026-06-01","ticker":"SPY","month_return_pct":-1.2,"month_close":746.32}],"shape":"ranking","sql":"SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS period_start, ticker,\n    round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct,\n    round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS month_close\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker IN ('SPY', 'QQQ')\n  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')\nGROUP BY period_start, ticker\nORDER BY period_start, ticker","computed_at":"2026-07-26T06:02:31.651694+00:00","elapsed":0.548955109}