STRASMORE/EXPLORE 2,170 QUERIES

The rank receipt: this June against every prior one (rank 1 = best; self-excluded)

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-07-26, from Market Recap: June 2026.

as of scalar 1×5read in context →
june 2026 pct
-1.2
rank best
15
junes compared
23
first year
2,004
sessions 2026
21
Rows × columns
1 × 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 The rank receipt: this June against every prior one (rank 1 = best; self-excluded), derived from the stored result.
ColumnTypeRangeNotes
june_2026_pct number every row is -1.2 percent
rank_best number every row is 15
junes_compared number every row is 23
first_year number every row is 2,004
sessions_2026 number every row is 21

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.

the exact SQL behind every number
SELECT round(anyIf(ret, y = 2026), 1) AS june_2026_pct,
       arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
       count() AS junes_compared,
       min(y) AS first_year,
       anyIf(sessions, y = 2026) AS sessions_2026
FROM (
    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
           uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY')
      AND window_start >= toDateTime('2003-01-01 00:00:00')
      AND window_start < toDateTime('2026-07-01 00:00:00')
      AND toMonth(toTimeZone(window_start, 'America/New_York')) = 6
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY y
    HAVING sessions >= 17
)

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

More from this analysisMarket Recap: June 2026
21 sessions, verified from the tape (Juneteenth closure receipt included) scalar 1×3 SPY sessions up vs down across the month, one cheap receipt scalar 1×4 June: whole-tape options contract volume and same-day-expiry share (one scan) scalar 1×3 June's corporate calendar: dividends, splits, listings, filings (June 30 index gap disclosed) scalar 1×6 May, recomputed identically for contrast (one scan) scalar 1×3 Advancers vs decliners for June (close vs the last May close), liquidity filter disclosed scalar 1×4 See all 2,170 queries →