{"slug":"after-hours-and-premarket-trading","qid":"aapl_spread_sessions","label":"AAPL median quoted spread: regular session vs extended hours (past week, full sessions)","post_title":"Premarket and After-Hours Trading Hours (ET)","post_url":"/blog/after-hours-and-premarket-trading#q-aapl_spread_sessions","columns":["trading_session","median_spread_cents","median_spread_bps"],"rows":[{"trading_session":"extended hours (premarket + after-hours)","median_spread_cents":15,"median_spread_bps":4.9},{"trading_session":"regular session (9:30 am - 4:00 pm ET)","median_spread_cents":3,"median_spread_bps":0.9}],"shape":"series","sql":"WITH full_sessions AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'AAPL'\n      AND window_start >= now() - INTERVAL 7 DAY\n      AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))\n    GROUP BY session_date\n    HAVING max(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 1140\n)\nSELECT trading_session,\n       round(quantileDeterministic(0.5)(spread_usd, tsk) * 100, 1) AS median_spread_cents,\n       round(quantileDeterministic(0.5)(spread_bps, tsk), 1) AS median_spread_bps\nFROM (\n    SELECT if(m BETWEEN 570 AND 959, 'regular session (9:30 am - 4:00 pm ET)', 'extended hours (premarket + after-hours)') AS trading_session,\n           toFloat64(ask_price - bid_price) AS spread_usd,\n           toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2) * 10000 AS spread_bps,\n           toUInt64(sip_timestamp) AS tsk,\n           toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York')) AS m\n    FROM global_markets.cache_stocks_quotes\n    WHERE ticker = 'AAPL'\n      AND sip_timestamp >= now() - INTERVAL 7 DAY\n      AND toDate(toTimeZone(sip_timestamp, 'America/New_York')) IN (SELECT session_date FROM full_sessions)\n      AND bid_price > 0\n      AND ask_price > bid_price\n      AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 240 AND 1199\n)\nGROUP BY trading_session\nORDER BY trading_session","computed_at":"2026-08-22T04:01:01.002530+00:00","elapsed":0.953858135}