{"slug":"how-stock-splits-are-announced","qid":"gap_by_month","label":"gap_by_month","post_title":"how-stock-splits-are-announced","post_url":"/blog/how-stock-splits-are-announced#q-gap_by_month","columns":["month","month_label","split_count","median_gap_days","shortest_gap_days","longest_gap_days"],"rows":[{"month":"2024-10-01","month_label":"Oct 2024","split_count":3,"median_gap_days":146,"shortest_gap_days":10,"longest_gap_days":194},{"month":"2024-12-01","month_label":"Dec 2024","split_count":4,"median_gap_days":86,"shortest_gap_days":2,"longest_gap_days":392},{"month":"2025-01-01","month_label":"Jan 2025","split_count":3,"median_gap_days":86,"shortest_gap_days":18,"longest_gap_days":89},{"month":"2025-02-01","month_label":"Feb 2025","split_count":3,"median_gap_days":14,"shortest_gap_days":2,"longest_gap_days":205},{"month":"2025-05-01","month_label":"May 2025","split_count":1,"median_gap_days":22,"shortest_gap_days":22,"longest_gap_days":22},{"month":"2025-06-01","month_label":"Jun 2025","split_count":2,"median_gap_days":52,"shortest_gap_days":43,"longest_gap_days":61},{"month":"2025-07-01","month_label":"Jul 2025","split_count":1,"median_gap_days":13,"shortest_gap_days":13,"longest_gap_days":13},{"month":"2025-09-01","month_label":"Sep 2025","split_count":2,"median_gap_days":42,"shortest_gap_days":20,"longest_gap_days":63},{"month":"2025-10-01","month_label":"Oct 2025","split_count":2,"median_gap_days":182,"shortest_gap_days":98,"longest_gap_days":266},{"month":"2025-11-01","month_label":"Nov 2025","split_count":2,"median_gap_days":260,"shortest_gap_days":160,"longest_gap_days":361},{"month":"2025-12-01","month_label":"Dec 2025","split_count":4,"median_gap_days":140,"shortest_gap_days":4,"longest_gap_days":399},{"month":"2026-01-01","month_label":"Jan 2026","split_count":1,"median_gap_days":198,"shortest_gap_days":198,"longest_gap_days":198},{"month":"2026-02-01","month_label":"Feb 2026","split_count":3,"median_gap_days":369,"shortest_gap_days":31,"longest_gap_days":369},{"month":"2026-03-01","month_label":"Mar 2026","split_count":1,"median_gap_days":8,"shortest_gap_days":8,"longest_gap_days":8},{"month":"2026-04-01","month_label":"Apr 2026","split_count":6,"median_gap_days":15,"shortest_gap_days":13,"longest_gap_days":216},{"month":"2026-05-01","month_label":"May 2026","split_count":1,"median_gap_days":1,"shortest_gap_days":1,"longest_gap_days":1},{"month":"2026-06-01","month_label":"Jun 2026","split_count":7,"median_gap_days":14,"shortest_gap_days":14,"longest_gap_days":91},{"month":"2026-07-01","month_label":"Jul 2026","split_count":1,"median_gap_days":205,"shortest_gap_days":205,"longest_gap_days":205},{"month":"2026-08-01","month_label":"Aug 2026","split_count":1,"median_gap_days":29,"shortest_gap_days":29,"longest_gap_days":29}],"shape":"series","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        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\n)\nSELECT\n    toStartOfMonth(execution_date)                           AS month,\n    formatDateTime(toStartOfMonth(execution_date), '%b %Y')  AS month_label,\n    toUInt32(count())                                        AS split_count,\n    toUInt32(round(quantileDeterministic(0.50)(toFloat64(gap_days), cityHash64(ticker, execution_date)))) AS median_gap_days,\n    toUInt32(min(gap_days))                                  AS shortest_gap_days,\n    toUInt32(max(gap_days))                                  AS longest_gap_days\nFROM gaps\nGROUP BY month, month_label\nORDER BY month","computed_at":"2026-10-03T15:02:58.834175+00:00","elapsed":0.149373321}