{"slug":"after-hours-and-premarket-trading","qid":"session_envelope","label":"The session envelope, read from SPY minute bars (last two weeks, ET)","post_title":"Premarket and After-Hours Trading Hours (ET)","post_url":"/blog/after-hours-and-premarket-trading#q-session_envelope","columns":["first_bar_et","last_bar_et","first_bar_minute_of_day","last_bar_minute_of_day","completed_sessions","first_session","last_session"],"rows":[{"first_bar_et":"04:00","last_bar_et":"19:59","first_bar_minute_of_day":240,"last_bar_minute_of_day":1199,"completed_sessions":10,"first_session":"2026-08-10","last_session":"2026-08-21"}],"shape":"scalar","sql":"SELECT\n    min(formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i')) AS first_bar_et,\n    max(formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i')) AS last_bar_et,\n    min(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) AS first_bar_minute_of_day,\n    max(toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) AS last_bar_minute_of_day,\n    uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS completed_sessions,\n    toString(min(toDate(toTimeZone(window_start, 'America/New_York')))) AS first_session,\n    toString(max(toDate(toTimeZone(window_start, 'America/New_York')))) AS last_session\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker = 'SPY'\n  AND window_start >= now() - INTERVAL 14 DAY\n  AND toDate(toTimeZone(window_start, 'America/New_York')) < toDate(toTimeZone(now(), 'America/New_York'))\n  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 240 AND 1199","computed_at":"2026-08-22T04:00:59.309438+00:00","elapsed":0.095818898}