{"slug":"msft-premarket-and-after-hours-prices","qid":"gap_buckets","label":"gap_buckets","post_title":"msft-premarket-and-after-hours-prices","post_url":"/blog/lang/zh-hant/msft-premarket-and-after-hours-prices#q-gap_buckets","columns":["gap_bucket","sessions","share_pct"],"rows":[{"gap_bucket":"0.00-0.25%","sessions":869,"share_pct":32.4},{"gap_bucket":"0.25-0.50%","sessions":649,"share_pct":24.2},{"gap_bucket":"0.50-1.00%","sessions":658,"share_pct":24.6},{"gap_bucket":"1.00-2.00%","sessions":365,"share_pct":13.6},{"gap_bucket":"2.00%+","sessions":138,"share_pct":5.2}],"shape":"ranking","sql":"WITH bars AS\n(\n    SELECT\n        date,\n        any(open)  AS open_px,\n        any(close) AS close_px\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'MSFT'\n      AND date >= '2016-01-01'\n      AND date <  '2026-09-01'\n    GROUP BY date\n),\ngaps AS\n(\n    SELECT\n        date,\n        round((toFloat64(open_px) / prev_close - 1) * 100, 3) AS gap_pct\n    FROM\n    (\n        SELECT\n            date,\n            open_px,\n            lagInFrame(toFloat64(close_px)) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close\n        FROM bars\n    )\n    WHERE prev_close > 0\n)\nSELECT\n    multiIf(abs(gap_pct) < 0.25, '0.00-0.25%',\n            abs(gap_pct) < 0.50, '0.25-0.50%',\n            abs(gap_pct) < 1.00, '0.50-1.00%',\n            abs(gap_pct) < 2.00, '1.00-2.00%',\n                                 '2.00%+')          AS gap_bucket,\n    count()                                         AS sessions,\n    round(100.0 * count() / sum(count()) OVER (), 1) AS share_pct\nFROM gaps\nGROUP BY gap_bucket\nORDER BY min(abs(gap_pct)) ASC","computed_at":"2026-09-26T15:42:43.085164+00:00","elapsed":0.003517794}