{"slug":"march-2009-market-bottom","qid":"did_it_hold","label":"Sixteen weeks after the low: weekly lows, closes, and the running minimum","post_title":"March 9, 2009: The Bottom, On the Tape","post_url":"/blog/march-2009-market-bottom#q-did_it_hold","columns":["week_of","week_low","week_close","lowest_low_after_mar9"],"rows":[{"week_of":"2009-03-09","week_low":69.37,"week_close":76.09,"lowest_low_after_mar9":69.37},{"week_of":"2009-03-16","week_low":75.45,"week_close":76.71,"lowest_low_after_mar9":69.37},{"week_of":"2009-03-23","week_low":78.31,"week_close":81.62,"lowest_low_after_mar9":69.37},{"week_of":"2009-03-30","week_low":77.96,"week_close":84.25,"lowest_low_after_mar9":69.37},{"week_of":"2009-04-06","week_low":81.51,"week_close":85.82,"lowest_low_after_mar9":69.37},{"week_of":"2009-04-13","week_low":83.61,"week_close":87.11,"lowest_low_after_mar9":69.37},{"week_of":"2009-04-20","week_low":82.75,"week_close":86.65,"lowest_low_after_mar9":69.37},{"week_of":"2009-04-27","week_low":84.76,"week_close":87.87,"lowest_low_after_mar9":69.37},{"week_of":"2009-05-04","week_low":88.38,"week_close":93.04,"lowest_low_after_mar9":69.37},{"week_of":"2009-05-11","week_low":88.15,"week_close":88.7,"lowest_low_after_mar9":69.37},{"week_of":"2009-05-18","week_low":88.26,"week_close":89.06,"lowest_low_after_mar9":69.37},{"week_of":"2009-05-25","week_low":88.32,"week_close":92.65,"lowest_low_after_mar9":69.37},{"week_of":"2009-06-01","week_low":87.53,"week_close":94.53,"lowest_low_after_mar9":69.37},{"week_of":"2009-06-08","week_low":93.04,"week_close":95.12,"lowest_low_after_mar9":69.37},{"week_of":"2009-06-15","week_low":90.83,"week_close":91.97,"lowest_low_after_mar9":69.37},{"week_of":"2009-06-22","week_low":88.85,"week_close":91.78,"lowest_low_after_mar9":69.37}],"shape":"ranking","sql":"WITH daily AS (\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,\n        minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS day_low,\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 day_close\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= toDateTime('2009-03-10 04:00:00') AND window_start < toDateTime('2009-06-27 00:00:00')\n    GROUP BY et_date\n)\nSELECT\n    week_of,\n    week_low,\n    week_close,\n    round(min(week_low) OVER (), 2) AS lowest_low_after_mar9\nFROM (\n    SELECT\n        toString(toMonday(et_date)) AS week_of,\n        round(min(day_low), 2) AS week_low,\n        round(argMax(day_close, et_date), 2) AS week_close\n    FROM daily\n    GROUP BY week_of\n)\nORDER BY week_of","computed_at":"2026-07-26T05:41:00.108651+00:00","elapsed":0.106249971}