aapl_splits
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-18, from stock-split-candidates.
| label | executed | ratio | pre_split_close | implied_post_split_price |
|---|---|---|---|---|
| February 28, 2005 | 2005-02-28 | 2-for-1 | 88.99 | 44.49 |
| June 9, 2014 | 2014-06-09 | 7-for-1 | 645.57 | 92.22 |
| August 31, 2020 | 2020-08-31 | 4-for-1 | 499.23 | 124.81 |
- Rows × columns
- 3 × 5
- Period covered
- to
- 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 |
|---|---|---|---|
label |
text | 3 distinct values | |
executed |
date | 2005-02-28 to 2020-08-31 | |
ratio |
text | 3 distinct values (2-for-1, 4-for-1, 7-for-1) | |
pre_split_close |
number | 88.99 to 645.57 | US dollars |
implied_post_split_price |
number | 44.49 to 124.81 | US dollars |
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
WITH
on_file AS
(
SELECT
ticker,
execution_date,
any(split_from) AS from_shares,
any(split_to) AS to_shares
FROM global_markets.stocks_splits
WHERE ticker = 'AAPL'
AND execution_date <= today()
GROUP BY ticker, execution_date
),
splits AS
(
SELECT
a.ticker AS ticker,
a.execution_date AS execution_date,
a.from_shares AS from_shares,
a.to_shares AS to_shares,
arrayProduct(groupArray(toFloat64(b.to_shares) / toFloat64(b.from_shares))) AS to_raw
FROM on_file AS a
INNER JOIN on_file AS b ON b.ticker = a.ticker
WHERE b.execution_date >= a.execution_date
AND a.to_shares > a.from_shares
GROUP BY a.ticker, a.execution_date, a.from_shares, a.to_shares
)
SELECT
concat(monthName(s.execution_date), ' ', toString(toDayOfMonth(s.execution_date)), ', ', toString(toYear(s.execution_date))) AS label,
toString(s.execution_date) AS executed,
concat(toString(toFloat64(s.to_shares)), '-for-', toString(toFloat64(s.from_shares))) AS ratio,
round(toFloat64(argMax(d.close, d.date)) * s.to_raw, 2) AS pre_split_close,
round(toFloat64(argMax(d.close, d.date)) * s.to_raw * toFloat64(s.from_shares) / toFloat64(s.to_shares), 2) AS implied_post_split_price
FROM splits AS s
INNER JOIN
(
SELECT ticker, date, close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
) AS d ON d.ticker = s.ticker
WHERE d.date < s.execution_date
AND d.date >= s.execution_date - 7
GROUP BY s.execution_date, s.to_shares, s.from_shares, s.to_raw
ORDER BY s.execution_date
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.