{"slug":"local-a-share-market-data-lake","qid":"tape_survival","label":"Survivorship, measured: March cohorts of US symbols still trading in late July 2026","post_title":"Local A-Share Data Lake for AI Agents","post_url":"/blog/local-a-share-market-data-lake#q-tape_survival","columns":["year","names_on_tape_count","still_trading_count","gone_count","still_trading_pct"],"rows":[{"year":2016,"names_on_tape_count":8101,"still_trading_count":4061,"gone_count":4040,"still_trading_pct":50.1},{"year":2017,"names_on_tape_count":8135,"still_trading_count":4273,"gone_count":3862,"still_trading_pct":52.5},{"year":2018,"names_on_tape_count":8298,"still_trading_count":4576,"gone_count":3722,"still_trading_pct":55.1},{"year":2019,"names_on_tape_count":8491,"still_trading_count":4932,"gone_count":3559,"still_trading_pct":58.1},{"year":2020,"names_on_tape_count":8792,"still_trading_count":5422,"gone_count":3370,"still_trading_pct":61.7},{"year":2021,"names_on_tape_count":9981,"still_trading_count":5937,"gone_count":4044,"still_trading_pct":59.5},{"year":2022,"names_on_tape_count":11553,"still_trading_count":6914,"gone_count":4639,"still_trading_pct":59.8},{"year":2023,"names_on_tape_count":11096,"still_trading_count":7479,"gone_count":3617,"still_trading_pct":67.4},{"year":2024,"names_on_tape_count":10703,"still_trading_count":8310,"gone_count":2393,"still_trading_pct":77.6},{"year":2025,"names_on_tape_count":11084,"still_trading_count":9614,"gone_count":1470,"still_trading_pct":86.7}],"shape":"table","sql":"WITH on_tape_now AS (\n    SELECT ticker\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-07-20')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')\n    GROUP BY ticker\n),\ncohort AS (\n    SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS cohort_year,\n           ticker\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE toYear(toTimeZone(window_start, 'America/New_York')) BETWEEN 2016 AND 2025\n      AND toMonth(toTimeZone(window_start, 'America/New_York')) = 3\n      AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 10 AND 14\n    GROUP BY cohort_year, ticker\n)\nSELECT c.cohort_year AS year,\n       count() AS names_on_tape_count,\n       countIf(n.ticker != '') AS still_trading_count,\n       count() - countIf(n.ticker != '') AS gone_count,\n       round(100 * countIf(n.ticker != '') / count(), 1) AS still_trading_pct\nFROM cohort AS c\nLEFT JOIN on_tape_now AS n ON c.ticker = n.ticker\nGROUP BY year\nORDER BY year","computed_at":"2026-08-05T03:38:11.419037+00:00","elapsed":0.003380895}