{"slug":"how-stock-splits-are-announced","qid":"gap_percentiles","label":"gap_percentiles","post_title":"how-stock-splits-are-announced","post_url":"/blog/how-stock-splits-are-announced#q-gap_percentiles","columns":["percentile","gap_days"],"rows":[{"percentile":"p10 quickest","gap_days":9},{"percentile":"p25","gap_days":14},{"percentile":"p50 median","gap_days":40},{"percentile":"p75","gap_days":170},{"percentile":"p90 slowest","gap_days":295}],"shape":"ranking","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    p.1 AS percentile,\n    p.2 AS gap_days\nFROM\n(\n    SELECT arrayJoin([\n        ('p10 quickest', toUInt32(round(quantileDeterministic(0.10)(toFloat64(gap_days), cityHash64(ticker, execution_date))))),\n        ('p25',          toUInt32(round(quantileDeterministic(0.25)(toFloat64(gap_days), cityHash64(ticker, execution_date))))),\n        ('p50 median',   toUInt32(round(quantileDeterministic(0.50)(toFloat64(gap_days), cityHash64(ticker, execution_date))))),\n        ('p75',          toUInt32(round(quantileDeterministic(0.75)(toFloat64(gap_days), cityHash64(ticker, execution_date))))),\n        ('p90 slowest',  toUInt32(round(quantileDeterministic(0.90)(toFloat64(gap_days), cityHash64(ticker, execution_date)))))\n    ]) AS p\n    FROM gaps\n)","computed_at":"2026-10-03T15:02:58.594892+00:00","elapsed":0.137237166}