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.
| wat_open | wat_close | session_count | from_label | through_label |
|---|---|---|---|---|
| 14:30 | 21:00 | 188 | Aug 29, 2025 | Sep 30, 2026 |
| 15:30 | 22:00 | 83 | Nov 3, 2025 | Mar 6, 2026 |
| 15:30 | 19:01 | 2 | Nov 28, 2025 | Dec 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
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
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
Use dis data for your AI assistant
E go open ready to query, with dis page data. Free, no account.