{"slug":"lehman-collapse-market-crash-2008","qid":"worst_days","label":"The ten worst SPY sessions, 2003-2025, plus where Lehman Monday ranks","post_title":"Lehman's Collapse: The 2008 Tape, Replayed","post_url":"/blog/lehman-collapse-market-crash-2008#q-worst_days","columns":["session","rank","change_pct","tarp_vote_rank","post_lehman_2008_top10"],"rows":[{"session":"2020-03-16","rank":1,"change_pct":-11.6,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2020-03-12","rank":2,"change_pct":-9.6,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2008-10-15","rank":3,"change_pct":-9.2,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2008-12-01","rank":4,"change_pct":-8.9,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2020-03-09","rank":5,"change_pct":-7.7,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2008-09-29","rank":6,"change_pct":-7,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2008-10-09","rank":7,"change_pct":-6.8,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2008-11-20","rank":8,"change_pct":-6.6,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2011-08-08","rank":9,"change_pct":-6.5,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2008-10-07","rank":10,"change_pct":-6.1,"tarp_vote_rank":6,"post_lehman_2008_top10":6},{"session":"2008-09-15","rank":34,"change_pct":-4.3,"tarp_vote_rank":6,"post_lehman_2008_top10":6}],"shape":"series","sql":"WITH daily AS (\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,\n        argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= toDateTime('2003-09-10 00:00:00') AND window_start < toDateTime('2026-01-01 00:00:00')\n    GROUP BY et_date\n),\nchanges AS (\n    SELECT et_date, close_usd,\n           lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close\n    FROM daily\n),\nranked AS (\n    SELECT\n        row_number() OVER (ORDER BY (close_usd / prev_close - 1) ASC, et_date ASC) AS rank,\n        toString(et_date) AS session,\n        round((close_usd / prev_close - 1) * 100, 1) AS change_pct\n    FROM changes\n    WHERE prev_close > 0 AND isFinite(close_usd / prev_close)\n),\n(SELECT any(rank) FROM ranked WHERE session = '2008-09-29') AS tarp_rank_s,\n(SELECT countIf(rank <= 10 AND session BETWEEN '2008-09-16' AND '2008-12-31') FROM ranked) AS post_lehman_s\nSELECT\n    session,\n    rank,\n    change_pct,\n    tarp_rank_s AS tarp_vote_rank,\n    post_lehman_s AS post_lehman_2008_top10\nFROM ranked\nWHERE rank <= 10 OR session = '2008-09-15'\nORDER BY rank","computed_at":"2026-07-26T05:38:14.631565+00:00","elapsed":23.434810919}