{"slug":"investing-at-all-time-highs","qid":"next_ath","label":"next_ath","post_title":"investing-at-all-time-highs","post_url":"/blog/investing-at-all-time-highs#q-next_ath","columns":["bucket","record_closes","share_pct","cumulative_share_pct"],"rows":[{"bucket":"within 1 month","record_closes":403,"share_pct":94.2,"cumulative_share_pct":94.2},{"bucket":"1 to 3 months","record_closes":16,"share_pct":3.7,"cumulative_share_pct":97.9},{"bucket":"3 to 6 months","record_closes":4,"share_pct":0.9,"cumulative_share_pct":98.8},{"bucket":"6 to 12 months","record_closes":2,"share_pct":0.5,"cumulative_share_pct":99.3},{"bucket":"more than 12 months","record_closes":3,"share_pct":0.7,"cumulative_share_pct":100}],"shape":"ranking","sql":"WITH\n    daily AS\n    (\n        SELECT\n            date,\n            toFloat64(argMax(close, _ingest_time)) AS close\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker = 'SPY'\n        GROUP BY date\n    ),\n    flagged AS\n    (\n        SELECT\n            date,\n            close >= max(close) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS is_record,\n            min(date) OVER ()                                                                          AS series_start,\n            max(date) OVER ()                                                                          AS series_end\n        FROM daily\n    ),\n    highs AS\n    (\n        SELECT\n            date,\n            series_end,\n            leadInFrame(date, 1) OVER (ORDER BY date ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS next_high\n        FROM flagged\n        WHERE is_record = 1\n          AND date >= addYears(series_start, 4)\n    ),\n    gaps AS\n    (\n        SELECT\n            if(next_high > date, dateDiff('day', date, next_high), 99999) AS gap_days\n        FROM highs\n        WHERE date <= subtractDays(series_end, 365)\n    ),\n    bucketed AS\n    (\n        SELECT\n            multiIf(gap_days <= 31,  'within 1 month',\n                    gap_days <= 92,  '1 to 3 months',\n                    gap_days <= 183, '3 to 6 months',\n                    gap_days <= 365, '6 to 12 months',\n                                     'more than 12 months') AS bucket,\n            count()                                          AS record_closes,\n            min(gap_days)                                    AS sort_key\n        FROM gaps\n        GROUP BY bucket\n    )\nSELECT\n    bucket,\n    record_closes,\n    round(100 * record_closes / sum(record_closes) OVER (), 1)                                        AS share_pct,\n    round(100 * sum(record_closes) OVER (ORDER BY sort_key ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)\n              / sum(record_closes) OVER (), 1)                                                        AS cumulative_share_pct\nFROM bucketed\nORDER BY sort_key","computed_at":"2026-09-20T15:14:15.439516+00:00","elapsed":0.0048159}