STRASMORE/EXPLORE 2,648 QUERIES

etf_split_record

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-09-26, from has-spy-ever-split.

as of ranking 8×4read in context →
etf_split_record — 8 rows by 4 columns, computed from US exchange, SIP and OPRA data.
symbolsplits_on_recordlatest_split_labellatest_split_ratio
SPY0none on recordn/a
QQQ0none on recordn/a
EEM1Jul 24, 20083-for-1
EWJ1Nov 7, 20161-for-4
IWM1Jun 9, 20052-for-1
XLF1Sep 19, 20161.14-for-1
DIA0none on recordn/a
MDY0none on recordn/a
Rows × columns
8 × 4
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 etf_split_record, derived from the stored result.
ColumnTypeRangeNotes
symbol text 8 distinct values (DIA, EEM, EWJ…)
splits_on_record number 0 to 1
latest_split_label text 5 distinct values (Jul 24, 2008, Jun 9, 2005, Nov 7, 2016…)
latest_split_ratio text 5 distinct values (1-for-4, 1.14-for-1, 2-for-1…)

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
    e.symbol                                                       AS symbol,
    toUInt32(countIf(s.execution_date > toDate('1971-01-01')))     AS splits_on_record,
    if(countIf(s.execution_date > toDate('1971-01-01')) = 0,
       'none on record',
       formatDateTime(max(s.execution_date), '%b %e, %Y'))         AS latest_split_label,
    if(countIf(s.execution_date > toDate('1971-01-01')) = 0,
       'n/a',
       argMax(concat(toString(round(toFloat64(s.split_to), 2)), '-for-',
                     toString(round(toFloat64(s.split_from), 2))),
              s.execution_date))                                   AS latest_split_ratio
FROM
(
    SELECT arrayJoin(['SPY', 'QQQ', 'DIA', 'IWM', 'MDY', 'EEM', 'XLF', 'EWJ']) AS symbol
) AS e
LEFT JOIN global_markets.stocks_splits AS s ON s.ticker = e.symbol
GROUP BY e.symbol
ORDER BY
    symbol = 'SPY' DESC,
    symbol = 'QQQ' DESC,
    splits_on_record DESC,
    symbol
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.

More from this analysishas-spy-ever-split
household_splits ranking 11×4 → spy_distributions ranking 10×3 → split_cadence ranking 10×4 → etf_price_ratio ranking 7×2 → split_record_coverage scalar 1×4 → Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays ranking 25×4 → See all 2,648 queries →