{"slug":"msft-decline-from-peak","qid":"drawdown_buckets","label":"drawdown_buckets","post_title":"msft-decline-from-peak","post_url":"/blog/lang/zh-hant/msft-decline-from-peak#q-drawdown_buckets","columns":["drawdown_bucket","sessions","share_pct","at_least_this_deep_pct"],"rows":[{"drawdown_bucket":"當日收在新高","sessions":304,"share_pct":10.3,"at_least_this_deep_pct":100},{"drawdown_bucket":"距高點 0 至 5%","sessions":1253,"share_pct":42.5,"at_least_this_deep_pct":89.7},{"drawdown_bucket":"距高點 5 至 10%","sessions":574,"share_pct":19.5,"at_least_this_deep_pct":47.2},{"drawdown_bucket":"距高點 10 至 20%","sessions":481,"share_pct":16.3,"at_least_this_deep_pct":27.8},{"drawdown_bucket":"距高點 20% 以上","sessions":338,"share_pct":11.5,"at_least_this_deep_pct":11.5}],"shape":"ranking","sql":"WITH daily AS\n(\n    SELECT\n        date,\n        toFloat64(max(close)) AS close\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'MSFT'\n      AND date >= '2015-01-01'\n    GROUP BY date\n),\nmarked AS\n(\n    SELECT\n        date,\n        close,\n        max(close) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS peak_close\n    FROM daily\n),\ntagged AS\n(\n    SELECT\n        multiIf(close >= peak_close, 1,\n                close / peak_close >= 0.95, 2,\n                close / peak_close >= 0.90, 3,\n                close / peak_close >= 0.80, 4,\n                5) AS ord,\n        multiIf(close >= peak_close, '當日收在新高',\n                close / peak_close >= 0.95, '距高點 0 至 5%',\n                close / peak_close >= 0.90, '距高點 5 至 10%',\n                close / peak_close >= 0.80, '距高點 10 至 20%',\n                '距高點 20% 以上') AS bucket\n    FROM marked\n),\ncounts AS\n(\n    SELECT\n        ord,\n        any(bucket) AS bucket_label,\n        count()     AS sessions\n    FROM tagged\n    GROUP BY ord\n),\ntotals AS\n(\n    SELECT sum(sessions) AS total FROM counts\n)\nSELECT\n    c.bucket_label                         AS drawdown_bucket,\n    toUInt32(c.sessions)                   AS sessions,\n    round(c.sessions * 100.0 / t.total, 1) AS share_pct,\n    round(sum(c.sessions) OVER (ORDER BY c.ord DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)\n          * 100.0 / t.total, 1)            AS at_least_this_deep_pct\nFROM counts AS c\nCROSS JOIN totals AS t\nORDER BY c.ord","computed_at":"2026-09-25T15:28:12.783227+00:00","elapsed":0.004545725}