{"slug":"market-recap-2026-q2","qid":"baseline_q2_history","label":"Every second quarter on the tape: SPY and QQQ, recomputed identically by year (session counts shown)","post_title":"Market Recap: Q2 2026","post_url":"/blog/market-recap-2026-q2#q-baseline_q2_history","columns":["y","ticker","sessions","q2_return_pct"],"rows":[{"y":2004,"ticker":"QQQ","sessions":62,"q2_return_pct":5.3},{"y":2004,"ticker":"SPY","sessions":62,"q2_return_pct":1.2},{"y":2005,"ticker":"SPY","sessions":64,"q2_return_pct":0.4},{"y":2006,"ticker":"SPY","sessions":63,"q2_return_pct":-2.4},{"y":2007,"ticker":"SPY","sessions":63,"q2_return_pct":5.5},{"y":2008,"ticker":"SPY","sessions":64,"q2_return_pct":-4.3},{"y":2009,"ticker":"SPY","sessions":63,"q2_return_pct":17.2},{"y":2010,"ticker":"SPY","sessions":63,"q2_return_pct":-12.5},{"y":2011,"ticker":"QQQ","sessions":63,"q2_return_pct":-1.2},{"y":2011,"ticker":"SPY","sessions":63,"q2_return_pct":-1.1},{"y":2012,"ticker":"QQQ","sessions":63,"q2_return_pct":-4.9},{"y":2012,"ticker":"SPY","sessions":63,"q2_return_pct":-3.1},{"y":2013,"ticker":"QQQ","sessions":64,"q2_return_pct":3.2},{"y":2013,"ticker":"SPY","sessions":64,"q2_return_pct":2.3},{"y":2014,"ticker":"QQQ","sessions":63,"q2_return_pct":6.6},{"y":2014,"ticker":"SPY","sessions":63,"q2_return_pct":4.3},{"y":2015,"ticker":"QQQ","sessions":63,"q2_return_pct":1.4},{"y":2015,"ticker":"SPY","sessions":63,"q2_return_pct":-0.2},{"y":2016,"ticker":"QQQ","sessions":64,"q2_return_pct":-0.9},{"y":2016,"ticker":"SPY","sessions":64,"q2_return_pct":2.5},{"y":2017,"ticker":"QQQ","sessions":63,"q2_return_pct":3.8},{"y":2017,"ticker":"SPY","sessions":63,"q2_return_pct":2.5},{"y":2018,"ticker":"QQQ","sessions":64,"q2_return_pct":7.8},{"y":2018,"ticker":"SPY","sessions":64,"q2_return_pct":3.3},{"y":2019,"ticker":"QQQ","sessions":63,"q2_return_pct":2.9},{"y":2019,"ticker":"SPY","sessions":63,"q2_return_pct":2.9},{"y":2020,"ticker":"QQQ","sessions":63,"q2_return_pct":33.8},{"y":2020,"ticker":"SPY","sessions":63,"q2_return_pct":24.4},{"y":2021,"ticker":"QQQ","sessions":63,"q2_return_pct":9.7},{"y":2021,"ticker":"SPY","sessions":63,"q2_return_pct":7.4},{"y":2022,"ticker":"QQQ","sessions":62,"q2_return_pct":-22.8},{"y":2022,"ticker":"SPY","sessions":62,"q2_return_pct":-16.8},{"y":2023,"ticker":"QQQ","sessions":62,"q2_return_pct":15.9},{"y":2023,"ticker":"SPY","sessions":62,"q2_return_pct":8.4},{"y":2024,"ticker":"QQQ","sessions":63,"q2_return_pct":7.6},{"y":2024,"ticker":"SPY","sessions":63,"q2_return_pct":3.9},{"y":2025,"ticker":"QQQ","sessions":62,"q2_return_pct":18},{"y":2025,"ticker":"SPY","sessions":62,"q2_return_pct":10.8},{"y":2026,"ticker":"QQQ","sessions":62,"q2_return_pct":26.5},{"y":2026,"ticker":"SPY","sessions":62,"q2_return_pct":14.1}],"shape":"table","sql":"SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,\n       ticker,\n       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,\n       round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS q2_return_pct\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker IN ('SPY', 'QQQ')\n  AND window_start >= toDateTime('2003-01-01 00:00:00')\n  AND window_start < toDateTime('2026-07-01 00:00:00')\n  AND toMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 4 AND 6\n  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\nGROUP BY y, ticker\nHAVING sessions >= 50\nORDER BY y ASC, ticker ASC","computed_at":"2026-07-16T12:05:00.407440+00:00","elapsed":17.171896983}