{"slug":"how-stock-splits-are-announced","qid":"fastest_slowest","label":"fastest_slowest","post_title":"how-stock-splits-are-announced","post_url":"/blog/how-stock-splits-are-announced#q-fastest_slowest","columns":["ticker","ratio","announced_on","effective_on","gap_days"],"rows":[{"ticker":"CVNA","ratio":"5:1","announced_on":"May 7, 2026","effective_on":"May 8, 2026","gap_days":1},{"ticker":"CRVL","ratio":"3:1","announced_on":"Dec 24, 2024","effective_on":"Dec 26, 2024","gap_days":2},{"ticker":"FTLF","ratio":"2:1","announced_on":"Feb 5, 2025","effective_on":"Feb 7, 2025","gap_days":2},{"ticker":"TTSH","ratio":"3000:1","announced_on":"Dec 12, 2025","effective_on":"Dec 16, 2025","gap_days":4},{"ticker":"JFB","ratio":"2:1","announced_on":"Mar 17, 2026","effective_on":"Mar 25, 2026","gap_days":8},{"ticker":"NFLX","ratio":"10:1","announced_on":"Nov 21, 2024","effective_on":"Nov 17, 2025","gap_days":361},{"ticker":"BULZ","ratio":"10:1","announced_on":"Feb 20, 2025","effective_on":"Feb 24, 2026","gap_days":369},{"ticker":"SHNY","ratio":"10:1","announced_on":"Feb 20, 2025","effective_on":"Feb 24, 2026","gap_days":369},{"ticker":"PANW","ratio":"2:1","announced_on":"Nov 20, 2023","effective_on":"Dec 16, 2024","gap_days":392},{"ticker":"NOW","ratio":"5:1","announced_on":"Nov 14, 2024","effective_on":"Dec 18, 2025","gap_days":399}],"shape":"table","sql":"WITH\nsplit_events AS (\n    SELECT\n        ticker,\n        execution_date,\n        max(toFloat64(split_to))   AS to_shares,\n        max(toFloat64(split_from)) AS from_shares\n    FROM global_markets.stocks_splits\n    WHERE execution_date >= today() - 730\n      AND execution_date <  today()\n      AND toFloat64(split_to) > toFloat64(split_from)\n      AND ticker NOT IN ('SPCX')\n    GROUP BY ticker, execution_date\n),\nsplit_stories AS (\n    SELECT\n        arrayJoin(tickers)    AS story_ticker,\n        toDate(published_utc) AS story_date\n    FROM global_markets.stocks_news\n    WHERE published_utc >= today() - 1140\n      AND positionCaseInsensitive(title, 'split') > 0\n),\ngaps AS (\n    SELECT\n        e.ticker                                             AS ticker,\n        e.execution_date                                     AS execution_date,\n        e.to_shares                                          AS to_shares,\n        e.from_shares                                        AS from_shares,\n        min(s.story_date)                                    AS first_story_date,\n        dateDiff('day', min(s.story_date), e.execution_date)  AS gap_days\n    FROM split_events AS e\n    INNER JOIN split_stories AS s ON s.story_ticker = e.ticker\n    WHERE s.story_date <  e.execution_date\n      AND s.story_date >= e.execution_date - 400\n    GROUP BY e.ticker, e.execution_date, e.to_shares, e.from_shares\n)\nSELECT\n    ticker,\n    concat(toString(to_shares), ':', toString(from_shares)) AS ratio,\n    formatDateTime(first_story_date, '%b %e, %Y')           AS announced_on,\n    formatDateTime(execution_date, '%b %e, %Y')             AS effective_on,\n    toUInt32(gap_days)                                      AS gap_days\nFROM\n(\n    SELECT\n        *,\n        row_number() OVER (ORDER BY gap_days ASC,  ticker ASC) AS quickest_rank,\n        row_number() OVER (ORDER BY gap_days DESC, ticker ASC) AS longest_rank\n    FROM gaps\n)\nWHERE quickest_rank <= 5 OR longest_rank <= 5\nORDER BY gap_days ASC, ticker ASC","computed_at":"2026-10-03T15:02:59.070649+00:00","elapsed":0.148589796}