{"slug":"market-recap-2026-06-29","qid":"sector_dispersion","label":"The eleven sector baskets: June 29 vs the June 26 close, regular hours","post_title":"Market Recap: June 29, 2026, The Day in Numbers","post_url":"/blog/market-recap-2026-06-29#q-sector_dispersion","columns":["sector","ticker","pct_change","range_pct","dollar_volume_m","pct_above_worst_sector"],"rows":[{"sector":"Technology","ticker":"XLK","pct_change":2.52,"range_pct":3.91,"dollar_volume_m":2075,"pct_above_worst_sector":4.34},{"sector":"Consumer discretionary","ticker":"XLY","pct_change":2.37,"range_pct":2.17,"dollar_volume_m":1142,"pct_above_worst_sector":4.2},{"sector":"Communication services","ticker":"XLC","pct_change":1.66,"range_pct":0.78,"dollar_volume_m":669,"pct_above_worst_sector":3.48},{"sector":"Industrials","ticker":"XLI","pct_change":0.89,"range_pct":1.23,"dollar_volume_m":1231,"pct_above_worst_sector":2.72},{"sector":"Financials","ticker":"XLF","pct_change":0.28,"range_pct":0.64,"dollar_volume_m":1593,"pct_above_worst_sector":2.1},{"sector":"Health care","ticker":"XLV","pct_change":0.26,"range_pct":0.76,"dollar_volume_m":1897,"pct_above_worst_sector":2.08},{"sector":"Utilities","ticker":"XLU","pct_change":-0.32,"range_pct":1.18,"dollar_volume_m":759,"pct_above_worst_sector":1.5},{"sector":"Consumer staples","ticker":"XLP","pct_change":-0.38,"range_pct":1.23,"dollar_volume_m":764,"pct_above_worst_sector":1.44},{"sector":"Energy","ticker":"XLE","pct_change":-0.52,"range_pct":1.51,"dollar_volume_m":1098,"pct_above_worst_sector":1.3},{"sector":"Real estate","ticker":"XLRE","pct_change":-0.64,"range_pct":1.45,"dollar_volume_m":217,"pct_above_worst_sector":1.18},{"sector":"Materials","ticker":"XLB","pct_change":-1.82,"range_pct":2.28,"dollar_volume_m":626,"pct_above_worst_sector":0}],"shape":"table","sql":"WITH per_etf AS (\n    SELECT\n        ticker,\n        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,\n        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,\n        maxIf(toFloat64(high), window_start >= '2026-06-29 00:00:00') AS day_high,\n        minIf(toFloat64(low), window_start >= '2026-06-29 00:00:00') AS day_low,\n        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') / 1e6, 0) AS dollar_volume_m\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')\n      AND ((window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')\n        OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00'))\n    GROUP BY ticker\n)\nSELECT\n    sector,\n    ticker,\n    round((monday_close / friday_close - 1) * 100, 2) AS pct_change,\n    round((day_high / day_low - 1) * 100, 2) AS range_pct,\n    dollar_volume_m,\n    round((monday_close / friday_close - 1) * 100 - min((monday_close / friday_close - 1) * 100) OVER (), 2) AS pct_above_worst_sector\nFROM (\n    SELECT *,\n        multiIf(ticker = 'XLB', 'Materials',\n                ticker = 'XLC', 'Communication services',\n                ticker = 'XLE', 'Energy',\n                ticker = 'XLF', 'Financials',\n                ticker = 'XLI', 'Industrials',\n                ticker = 'XLK', 'Technology',\n                ticker = 'XLP', 'Consumer staples',\n                ticker = 'XLRE', 'Real estate',\n                ticker = 'XLU', 'Utilities',\n                ticker = 'XLV', 'Health care',\n                'Consumer discretionary') AS sector\n    FROM per_etf\n)\nORDER BY pct_change DESC","computed_at":"2026-07-26T05:42:58.038566+00:00","elapsed":0.074393472}