{"slug":"survivorship-bias-in-stock-data","qid":"recycled_symbols","label":"Symbols relisted under a new issuer after a long silence","post_title":"Survivorship Bias in Stock Data, Explained","post_url":"/blog/survivorship-bias-in-stock-data#q-recycled_symbols","columns":["year","relisting_count","avg_dark_stretch","longest_dark_stretch"],"rows":[{"year":"2022","relisting_count":16,"avg_dark_stretch":3247,"longest_dark_stretch":5734},{"year":"2023","relisting_count":20,"avg_dark_stretch":3313,"longest_dark_stretch":6692},{"year":"2024","relisting_count":45,"avg_dark_stretch":3767,"longest_dark_stretch":7129},{"year":"2025","relisting_count":56,"avg_dark_stretch":3083,"longest_dark_stretch":7379},{"year":"2026","relisting_count":35,"avg_dark_stretch":3852,"longest_dark_stretch":7840}],"shape":"ranking","sql":"SELECT\n    toString(toYear(relisted_on)) AS year,\n    count()                       AS relisting_count,\n    round(avg(dark_stretch))      AS avg_dark_stretch,\n    max(dark_stretch)             AS longest_dark_stretch\nFROM\n(\n    SELECT\n        ticker,\n        any(relist_date)                             AS relisted_on,\n        dateDiff('day', max(date), any(relist_date)) AS dark_stretch\n    FROM\n    (\n        SELECT\n            d.ticker      AS ticker,\n            d.date        AS date,\n            i.relist_date AS relist_date\n        FROM global_markets.stocks_daily_aggs AS d\n        INNER JOIN\n        (\n            SELECT\n                ticker,\n                min(toDate(listing_date)) AS relist_date\n            FROM global_markets.stocks_ipos\n            WHERE toDate(listing_date) BETWEEN '2022-01-01' AND today()\n              AND ticker NOT IN ('SPCX')\n            GROUP BY ticker\n        ) AS i ON i.ticker = d.ticker\n        WHERE d.date < i.relist_date\n    )\n    GROUP BY ticker\n    HAVING dateDiff('day', max(date), any(relist_date)) >= 250\n       AND count() >= 200\n)\nGROUP BY year\nORDER BY year","computed_at":"2026-08-22T04:22:30.519067+00:00","elapsed":2.308829609}