{"slug":"the-september-effect","qid":"decades","label":"decades","post_title":"the-september-effect","post_url":"/blog/the-september-effect#q-decades","columns":["label","sep_avg_return_pct","other_months_avg_return_pct","sample_count"],"rows":[{"label":"2000s","sep_avg_return_pct":-0.05,"other_months_avg_return_pct":0.26,"sample_count":6},{"label":"2010s","sep_avg_return_pct":0.33,"other_months_avg_return_pct":1.01,"sample_count":10},{"label":"2020s","sep_avg_return_pct":-3.12,"other_months_avg_return_pct":1.56,"sample_count":6}],"shape":"ranking","sql":"WITH month_ends AS\n(\n    SELECT\n        toStartOfMonth(date)           AS month_start,\n        argMax(toFloat64(close), date) AS month_end_close\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n      AND date < toStartOfYear(today())\n    GROUP BY month_start\n),\nmonthly_returns AS\n(\n    SELECT\n        month_start,\n        month_end_close,\n        lagInFrame(month_end_close, 1) OVER (ORDER BY month_start ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS prev_close\n    FROM month_ends\n)\nSELECT\n    concat(toString(intDiv(toYear(month_start), 10) * 10), 's')      AS label,\n    round(avgIf(monthly_return, toMonth(month_start) = 9) * 100, 2)  AS sep_avg_return_pct,\n    round(avgIf(monthly_return, toMonth(month_start) != 9) * 100, 2) AS other_months_avg_return_pct,\n    countIf(toMonth(month_start) = 9)                                AS sample_count\nFROM\n(\n    SELECT\n        month_start,\n        month_end_close / prev_close - 1 AS monthly_return\n    FROM monthly_returns\n    WHERE prev_close > 0\n)\nGROUP BY label\nHAVING countIf(toMonth(month_start) = 9) > 0\nORDER BY label","computed_at":"2026-09-18T15:57:51.865559+00:00","elapsed":0.059388108}