STRASMORE/EXPLORE 2,985 QUERIES

clock_census

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-03, from us-stock-market-hours-lagos-time.

as of table 3×5read in context →
clock_census — 3 rows by 5 columns, computed from US exchange, SIP and OPRA data.
wat_openwat_closesession_countfrom_labelthrough_label
14:3021:00188Aug 29, 2025Sep 30, 2026
15:3022:0083Nov 3, 2025Mar 6, 2026
15:3019:012Nov 28, 2025Dec 24, 2025
Rows × columns
3 × 5
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for clock_census, derived from the stored result.
ColumnTypeRangeNotes
wat_open text 2 distinct values (14:30, 15:30)
wat_close text 3 distinct values (19:01, 21:00, 22:00)
session_count number 2 to 188 count
from_label text 3 distinct values (Aug 29, 2025, Nov 28, 2025, Nov 3, 2025)
through_label text 3 distinct values (Dec 24, 2025, Mar 6, 2026, Sep 30, 2026)

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

SELECT
    concat(leftPad(toString(intDiv(open_min, 60)), 2, '0'), ':',
           leftPad(toString(open_min % 60), 2, '0'))             AS wat_open,
    concat(leftPad(toString(intDiv(close_min, 60)), 2, '0'), ':',
           leftPad(toString(close_min % 60), 2, '0'))            AS wat_close,
    count()                                                      AS session_count,
    formatDateTime(min(session_date), '%b %e, %Y')               AS from_label,
    formatDateTime(max(session_date), '%b %e, %Y')               AS through_label
FROM
(
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York'))          AS session_date,
        min(toHour(window_start) * 60 + toMinute(window_start)) + 60  AS open_min,
        max(toHour(window_start) * 60 + toMinute(window_start)) + 61  AS close_min
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= today() - 400
      AND window_start <  today() - 2
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) <  960
    GROUP BY session_date
)
GROUP BY wat_open, wat_close
ORDER BY session_count DESC
⌘/Ctrl + Enter

Use dis data for your AI assistant

E go open ready to query, with dis page data. Free, no account.