raise_history
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-20, from msft-dividend-2026.
| year | prior_quarterly_rate | new_quarterly_rate | raise_pct | declared_on | first_ex_date_at_new_rate | first_pay_date_at_new_rate |
|---|---|---|---|---|---|---|
| 2020 | 0.51 | 0.56 | 9.8 | Sep 15, 2020 | Nov 18, 2020 | Dec 10, 2020 |
| 2021 | 0.56 | 0.62 | 10.7 | Sep 14, 2021 | Nov 17, 2021 | Dec 9, 2021 |
| 2022 | 0.62 | 0.68 | 9.7 | Sep 20, 2022 | Nov 16, 2022 | Dec 8, 2022 |
| 2023 | 0.68 | 0.75 | 10.3 | Sep 19, 2023 | Nov 15, 2023 | Dec 14, 2023 |
| 2024 | 0.75 | 0.83 | 10.7 | Sep 16, 2024 | Nov 21, 2024 | Dec 12, 2024 |
| 2025 | 0.83 | 0.91 | 9.6 | Sep 15, 2025 | Nov 20, 2025 | Dec 11, 2025 |
| 2026 | 0.91 | 0.98 | 7.7 | Sep 14, 2026 | Nov 19, 2026 | Dec 10, 2026 |
- Rows × columns
- 7 × 7
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
year |
number | 2,020 to 2,026 | |
prior_quarterly_rate |
number | 0.51 to 0.91 | ratio or rate |
new_quarterly_rate |
number | 0.56 to 0.98 | ratio or rate |
raise_pct |
number | 7.7 to 10.7 | percent |
declared_on |
text | 7 distinct values (Sep 14, 2021, Sep 14, 2026, Sep 15, 2020…) | |
first_ex_date_at_new_rate |
text | 7 distinct values (Nov 15, 2023, Nov 16, 2022, Nov 17, 2021…) | |
first_pay_date_at_new_rate |
text | 7 distinct values (Dec 10, 2020, Dec 10, 2026, Dec 11, 2025…) |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
SELECT
cur.year AS year,
round(toFloat64(prev.new_rate), 2) AS prior_quarterly_rate,
round(toFloat64(cur.new_rate), 2) AS new_quarterly_rate,
round((toFloat64(cur.new_rate) / toFloat64(prev.new_rate) - 1) * 100, 1) AS raise_pct,
concat(formatDateTime(cur.declared_day, '%b'), ' ',
toString(toDayOfMonth(cur.declared_day)), ', ',
toString(toYear(cur.declared_day))) AS declared_on,
concat(formatDateTime(cur.first_ex_day, '%b'), ' ',
toString(toDayOfMonth(cur.first_ex_day)), ', ',
toString(toYear(cur.first_ex_day))) AS first_ex_date_at_new_rate,
concat(formatDateTime(cur.first_pay_day, '%b'), ' ',
toString(toDayOfMonth(cur.first_pay_day)), ', ',
toString(toYear(cur.first_pay_day))) AS first_pay_date_at_new_rate
FROM
(
SELECT
toYear(ex_dividend_date) AS year,
max(cash_amount) AS new_rate,
toDateOrNull(toString(any(declaration_date))) AS declared_day,
min(ex_dividend_date) AS first_ex_day,
toDateOrNull(toString(any(pay_date))) AS first_pay_day
FROM global_markets.stocks_dividends
WHERE ticker = 'MSFT'
AND toMonth(ex_dividend_date) >= 10
AND ex_dividend_date >= toDate('2019-10-01')
AND ex_dividend_date < toDate('2027-01-01')
GROUP BY year
) AS cur
INNER JOIN
(
SELECT
toUInt16(toYear(ex_dividend_date) + 1) AS next_year,
max(cash_amount) AS new_rate
FROM global_markets.stocks_dividends
WHERE ticker = 'MSFT'
AND toMonth(ex_dividend_date) >= 10
AND ex_dividend_date >= toDate('2019-10-01')
AND ex_dividend_date < toDate('2027-01-01')
GROUP BY next_year
) AS prev ON cur.year = prev.next_year
ORDER BY year