{"slug":"stock-split-cost-basis","qid":"splits_by_year","label":"Forward and reverse splits per calendar year","post_title":"Cost Basis After a Stock Split, Step by Step","post_url":"/blog/stock-split-cost-basis#q-splits_by_year","columns":["year","forward_splits","reverse_splits"],"rows":[{"year":"2016","forward_splits":149,"reverse_splits":266},{"year":"2017","forward_splits":379,"reverse_splits":701},{"year":"2018","forward_splits":516,"reverse_splits":524},{"year":"2019","forward_splits":388,"reverse_splits":606},{"year":"2020","forward_splits":352,"reverse_splits":679},{"year":"2021","forward_splits":404,"reverse_splits":488},{"year":"2022","forward_splits":362,"reverse_splits":622},{"year":"2023","forward_splits":358,"reverse_splits":834},{"year":"2024","forward_splits":451,"reverse_splits":867},{"year":"2025","forward_splits":424,"reverse_splits":1036},{"year":"2026","forward_splits":289,"reverse_splits":778}],"shape":"ranking","sql":"SELECT\n    toString(toYear(execution_date))     AS year,\n    toUInt32(countIf(to_val > from_val)) AS forward_splits,\n    toUInt32(countIf(from_val > to_val)) AS reverse_splits\nFROM\n(\n    SELECT\n        ticker,\n        execution_date,\n        any(split_from) AS from_val,\n        any(split_to)   AS to_val\n    FROM global_markets.stocks_splits\n    WHERE execution_date >= subtractYears(today(), 10)\n      AND execution_date <= today()\n      AND split_from > 0\n      AND split_to > 0\n    GROUP BY ticker, execution_date\n)\nGROUP BY year\nORDER BY year","computed_at":"2026-08-22T04:22:20.040100+00:00","elapsed":0.064805376}