fastest_slowest
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-10-03, from how-stock-splits-are-announced.
| ticker | ratio | announced_on | effective_on | gap_days |
|---|---|---|---|---|
| CVNA | 5:1 | May 7, 2026 | May 8, 2026 | 1 |
| CRVL | 3:1 | Dec 24, 2024 | Dec 26, 2024 | 2 |
| FTLF | 2:1 | Feb 5, 2025 | Feb 7, 2025 | 2 |
| TTSH | 3000:1 | Dec 12, 2025 | Dec 16, 2025 | 4 |
| JFB | 2:1 | Mar 17, 2026 | Mar 25, 2026 | 8 |
| NFLX | 10:1 | Nov 21, 2024 | Nov 17, 2025 | 361 |
| BULZ | 10:1 | Feb 20, 2025 | Feb 24, 2026 | 369 |
| SHNY | 10:1 | Feb 20, 2025 | Feb 24, 2026 | 369 |
| PANW | 2:1 | Nov 20, 2023 | Dec 16, 2024 | 392 |
| NOW | 5:1 | Nov 14, 2024 | Dec 18, 2025 | 399 |
- Rows × columns
- 10 × 5
- 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 |
|---|---|---|---|
ticker |
text | 10 distinct values (BULZ, CRVL, CVNA…) | |
ratio |
text | 5 distinct values (10:1, 2:1, 3000:1…) | |
announced_on |
text | 9 distinct values (Dec 12, 2025, Dec 24, 2024, Feb 20, 2025…) | |
effective_on |
text | 9 distinct values (Dec 16, 2024, Dec 16, 2025, Dec 18, 2025…) | |
gap_days |
number | 1 to 399 |
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.
WITH
split_events AS (
SELECT
ticker,
execution_date,
max(toFloat64(split_to)) AS to_shares,
max(toFloat64(split_from)) AS from_shares
FROM global_markets.stocks_splits
WHERE execution_date >= today() - 730
AND execution_date < today()
AND toFloat64(split_to) > toFloat64(split_from)
AND ticker NOT IN ('SPCX')
GROUP BY ticker, execution_date
),
split_stories AS (
SELECT
arrayJoin(tickers) AS story_ticker,
toDate(published_utc) AS story_date
FROM global_markets.stocks_news
WHERE published_utc >= today() - 1140
AND positionCaseInsensitive(title, 'split') > 0
),
gaps AS (
SELECT
e.ticker AS ticker,
e.execution_date AS execution_date,
e.to_shares AS to_shares,
e.from_shares AS from_shares,
min(s.story_date) AS first_story_date,
dateDiff('day', min(s.story_date), e.execution_date) AS gap_days
FROM split_events AS e
INNER JOIN split_stories AS s ON s.story_ticker = e.ticker
WHERE s.story_date < e.execution_date
AND s.story_date >= e.execution_date - 400
GROUP BY e.ticker, e.execution_date, e.to_shares, e.from_shares
)
SELECT
ticker,
concat(toString(to_shares), ':', toString(from_shares)) AS ratio,
formatDateTime(first_story_date, '%b %e, %Y') AS announced_on,
formatDateTime(execution_date, '%b %e, %Y') AS effective_on,
toUInt32(gap_days) AS gap_days
FROM
(
SELECT
*,
row_number() OVER (ORDER BY gap_days ASC, ticker ASC) AS quickest_rank,
row_number() OVER (ORDER BY gap_days DESC, ticker ASC) AS longest_rank
FROM gaps
)
WHERE quickest_rank <= 5 OR longest_rank <= 5
ORDER BY gap_days ASC, ticker ASC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.