{"slug":"stock-split-cost-basis","qid":"split_ladder","label":"One hypothetical 100-share lot through every AAPL split","post_title":"Cost Basis After a Stock Split, Step by Step","post_url":"/blog/stock-split-cost-basis#q-split_ladder","columns":["split_date","split_month","split_label","share_count","per_share_basis"],"rows":[{"split_date":"2005-02-28","split_month":"Feb 2005","split_label":"2-for-1","share_count":200,"per_share_basis":25},{"split_date":"2014-06-09","split_month":"Jun 2014","split_label":"7-for-1","share_count":1400,"per_share_basis":3.5714},{"split_date":"2020-08-31","split_month":"Aug 2020","split_label":"4-for-1","share_count":5600,"per_share_basis":0.8929}],"shape":"series","sql":"WITH events AS\n(\n    SELECT\n        execution_date                                                      AS split_day,\n        any(toFloat64(split_to)) / any(toFloat64(split_from))               AS ratio,\n        concat(toString(any(split_to)), '-for-', toString(any(split_from))) AS split_label\n    FROM global_markets.stocks_splits\n    WHERE ticker = 'AAPL'\n      AND execution_date <= today()\n      AND split_from > 0\n      AND split_to > 0\n    GROUP BY execution_date\n)\nSELECT\n    toString(split_day)                   AS split_date,\n    formatDateTime(split_day, '%b %Y')    AS split_month,\n    split_label,\n    toUInt32(round(100 * cumulative))     AS share_count,\n    round(5000.0 / (100 * cumulative), 4) AS per_share_basis\nFROM\n(\n    SELECT\n        split_day,\n        split_label,\n        exp(sum(log(ratio)) OVER (ORDER BY split_day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS cumulative\n    FROM events\n)\nORDER BY split_day","computed_at":"2026-08-22T04:22:19.877477+00:00","elapsed":0.132365369}