{"slug":"market-recap-2026-h1","qid":"h1_scoreboard","label":"H1 2026: half, Q1, and Q2 returns for the four index ETFs, computed in one query","post_title":"Market Recap: H1 2026","post_url":"/blog/market-recap-2026-h1#q-h1_scoreboard","columns":["ticker","h1_return_pct","q1_return_pct","q2_return_pct","h1_close"],"rows":[{"ticker":"DIA","h1_return_pct":8.4,"q1_return_pct":-3.9,"q2_return_pct":12.1,"h1_close":522.28},{"ticker":"IWM","h1_return_pct":21.3,"q1_return_pct":0.1,"q2_return_pct":20.2,"h1_close":300.42},{"ticker":"QQQ","h1_return_pct":18.7,"q1_return_pct":-6.9,"q2_return_pct":26.5,"h1_close":735.76},{"ticker":"SPY","h1_return_pct":8.8,"q1_return_pct":-5.2,"q2_return_pct":14.1,"h1_close":746.32}],"shape":"table","sql":"SELECT ticker,\n    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)\n         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,\n    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)\n         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,\n    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)\n         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,\n    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS h1_close\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')\n  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')\nGROUP BY ticker\nORDER BY ticker","computed_at":"2026-07-26T06:01:45.757350+00:00","elapsed":0.947627827}