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.
| symbol | splits_on_record | latest_split_label | latest_split_ratio |
|---|---|---|---|
| SPY | 0 | none on record | n/a |
| QQQ | 0 | none on record | n/a |
| EEM | 1 | Jul 24, 2008 | 3-for-1 |
| EWJ | 1 | Nov 7, 2016 | 1-for-4 |
| IWM | 1 | Jun 9, 2005 | 2-for-1 |
| XLF | 1 | Sep 19, 2016 | 1.14-for-1 |
| DIA | 0 | none on record | n/a |
| MDY | 0 | none on record | n/a |
- Rows × columns
- 8 × 4
- 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 |
|---|---|---|---|
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
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.