{"slug":"after-hours-trading-on-holidays-and-weekends","qid":"closure_window","label":"closure_window","post_title":"after-hours-trading-on-holidays-and-weekends","post_url":"/blog/after-hours-trading-on-holidays-and-weekends#q-closure_window","columns":["session_date","weekday","first_print_et_minute","last_print_et_minute","last_print_et"],"rows":[{"session_date":"2025-11-24","weekday":"Mon","first_print_et_minute":240,"last_print_et_minute":1199,"last_print_et":"19:59"},{"session_date":"2025-11-25","weekday":"Tue","first_print_et_minute":240,"last_print_et_minute":1199,"last_print_et":"19:59"},{"session_date":"2025-11-26","weekday":"Wed","first_print_et_minute":240,"last_print_et_minute":1139,"last_print_et":"18:59"},{"session_date":"2025-11-27","weekday":"Thu","first_print_et_minute":0,"last_print_et_minute":0,"last_print_et":"no trading"},{"session_date":"2025-11-28","weekday":"Fri","first_print_et_minute":240,"last_print_et_minute":1019,"last_print_et":"16:59"},{"session_date":"2025-11-29","weekday":"Sat","first_print_et_minute":0,"last_print_et_minute":0,"last_print_et":"no trading"},{"session_date":"2025-11-30","weekday":"Sun","first_print_et_minute":0,"last_print_et_minute":0,"last_print_et":"no trading"},{"session_date":"2025-12-01","weekday":"Mon","first_print_et_minute":240,"last_print_et_minute":1199,"last_print_et":"19:59"},{"session_date":"2025-12-02","weekday":"Tue","first_print_et_minute":240,"last_print_et_minute":1199,"last_print_et":"19:59"},{"session_date":"2025-12-03","weekday":"Wed","first_print_et_minute":240,"last_print_et_minute":1199,"last_print_et":"19:59"},{"session_date":"2025-12-04","weekday":"Thu","first_print_et_minute":240,"last_print_et_minute":1199,"last_print_et":"19:59"},{"session_date":"2025-12-05","weekday":"Fri","first_print_et_minute":240,"last_print_et_minute":1139,"last_print_et":"18:59"}],"shape":"series","sql":"SELECT\n    toString(cal.day)                       AS session_date,\n    formatDateTime(cal.day, '%a')           AS weekday,\n    toUInt32(ifNull(t.first_minute, 0))     AS first_print_et_minute,\n    toUInt32(ifNull(t.last_minute, 0))      AS last_print_et_minute,\n    if(last_print_et_minute = 0,\n       'no trading',\n       concat(leftPad(toString(intDiv(last_print_et_minute, 60)), 2, '0'), ':',\n              leftPad(toString(modulo(last_print_et_minute, 60)), 2, '0'))) AS last_print_et\nFROM\n(\n    SELECT toDate('2025-11-24') + arrayJoin(range(12)) AS day\n) AS cal\nLEFT JOIN\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n        min(toHour(toTimeZone(window_start, 'America/New_York')) * 60\n            + toMinute(toTimeZone(window_start, 'America/New_York'))) AS first_minute,\n        max(toHour(toTimeZone(window_start, 'America/New_York')) * 60\n            + toMinute(toTimeZone(window_start, 'America/New_York'))) AS last_minute\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= '2025-11-24 00:00:00'\n      AND window_start <  '2025-12-06 06:00:00'\n    GROUP BY d\n) AS t ON t.d = cal.day\nORDER BY cal.day","computed_at":"2026-09-22T15:21:08.170815+00:00","elapsed":0.09964426}