{"slug":"msft-premarket-and-after-hours-prices","qid":"gap_by_year","label":"gap_by_year","post_title":"msft-premarket-and-after-hours-prices","post_url":"/blog/lang/zh-hant/msft-premarket-and-after-hours-prices#q-gap_by_year","columns":["year","sessions","median_abs_gap_pct","over_1pct_share_pct"],"rows":[{"year":"2016","sessions":251,"median_abs_gap_pct":0.31,"over_1pct_share_pct":11.6},{"year":"2017","sessions":251,"median_abs_gap_pct":0.24,"over_1pct_share_pct":4},{"year":"2018","sessions":251,"median_abs_gap_pct":0.44,"over_1pct_share_pct":16.3},{"year":"2019","sessions":252,"median_abs_gap_pct":0.43,"over_1pct_share_pct":15.9},{"year":"2020","sessions":253,"median_abs_gap_pct":0.65,"over_1pct_share_pct":31.2},{"year":"2021","sessions":252,"median_abs_gap_pct":0.39,"over_1pct_share_pct":17.5},{"year":"2022","sessions":251,"median_abs_gap_pct":0.64,"over_1pct_share_pct":33.5},{"year":"2023","sessions":250,"median_abs_gap_pct":0.48,"over_1pct_share_pct":18.8},{"year":"2024","sessions":252,"median_abs_gap_pct":0.34,"over_1pct_share_pct":13.5},{"year":"2025","sessions":250,"median_abs_gap_pct":0.4,"over_1pct_share_pct":17.2},{"year":"2026","sessions":166,"median_abs_gap_pct":0.66,"over_1pct_share_pct":30.7}],"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    toString(toYear(date))                                                                      AS year,\n    count()                                                                                     AS sessions,\n    round(quantileDeterministic(0.5)(abs(gap_pct), toUInt64(toYYYYMMDD(date))), 2)               AS median_abs_gap_pct,\n    round(100.0 * countIf(abs(gap_pct) > 1) / count(), 1)                                        AS over_1pct_share_pct\nFROM gaps\nGROUP BY year\nORDER BY year ASC","computed_at":"2026-09-26T15:42:43.174240+00:00","elapsed":0.003967995}