STRASMORE/EXPLORE 2,358 QUERIES

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.

as of table 3×5read in context →
aapl_splits — 3 rows by 5 columns, computed from US exchange, SIP and OPRA data.
labelexecutedratiopre_split_closeimplied_post_split_price
February 28, 20052005-02-282-for-188.9944.49
June 9, 20142014-06-097-for-1645.5792.22
August 31, 20202020-08-314-for-1499.23124.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
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for aapl_splits, derived from the stored result.
ColumnTypeRangeNotes
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.

More from this analysisstock-split-candidates
split_history table 16×6 candidates table 15×8 stubborn table 12×5 aapl_trace series 84×4 The 2s10s spread, every print of the half table 124×2 The 2s10s spread, every print of the half table 124×2 See all 2,358 queries →