{"slug":"market-recap-2026-h1","qid":"sector_returns","label":"The eleven sector ETFs: H1 2026 return, Q1 and Q2 split, and H1 dollar volume","post_title":"Market Recap: H1 2026","post_url":"/blog/market-recap-2026-h1#q-sector_returns","columns":["ticker","h1_return_pct","q1_return_pct","q2_return_pct","h1_dollar_bn"],"rows":[{"ticker":"XLB","h1_return_pct":11.7,"q1_return_pct":9.8,"q2_return_pct":1,"h1_dollar_bn":86.8},{"ticker":"XLC","h1_return_pct":-9.3,"q1_return_pct":-6.2,"q2_return_pct":-3.7,"h1_dollar_bn":90.3},{"ticker":"XLE","h1_return_pct":18.8,"q1_return_pct":36.9,"q2_return_pct":-11,"h1_dollar_bn":316.2},{"ticker":"XLF","h1_return_pct":-2.2,"q1_return_pct":-9.9,"q2_return_pct":7.7,"h1_dollar_bn":271.7},{"ticker":"XLI","h1_return_pct":19,"q1_return_pct":3.9,"q2_return_pct":13.3,"h1_dollar_bn":222.8},{"ticker":"XLK","h1_return_pct":30.8,"q1_return_pct":-8.7,"q2_return_pct":42,"h1_dollar_bn":286},{"ticker":"XLP","h1_return_pct":6.9,"q1_return_pct":5.5,"q2_return_pct":1.7,"h1_dollar_bn":163.7},{"ticker":"XLRE","h1_return_pct":9.1,"q1_return_pct":1.3,"q2_return_pct":7.7,"h1_dollar_bn":38.4},{"ticker":"XLU","h1_return_pct":5.7,"q1_return_pct":7,"q2_return_pct":-1,"h1_dollar_bn":128.7},{"ticker":"XLV","h1_return_pct":2.5,"q1_return_pct":-5.4,"q2_return_pct":7.8,"h1_dollar_bn":218.8},{"ticker":"XLY","h1_return_pct":-2.3,"q1_return_pct":-9.3,"q2_return_pct":6.9,"h1_dollar_bn":132.5}],"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(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')\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:02:32.745759+00:00","elapsed":0.53922406}