STRASMORE/EXPLORE 2,214 QUERIES

payment_calendar

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-12, from mo-dividend-increase-history.

as of series 4×6read in context →
payment_calendar — 4 rows by 6 columns, computed from US exchange, SIP and OPRA data.
ex_daterecord_onpaid_onquarterly_dividendamount_labelstatus
2025-12-26Dec 26, 2025Jan 9, 20261.061.06paid
2026-03-25Mar 25, 2026Apr 30, 20261.061.06paid
2026-06-15Jun 15, 2026Jul 10, 20261.061.06paid
2026-09-15Sep 15, 2026Oct 9, 20261.111.11upcoming
Rows × columns
4 × 6
Period covered
to
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for payment_calendar, derived from the stored result.
ColumnTypeRangeNotes
ex_date date 2025-12-26 to 2026-09-15
record_on text 4 distinct values (Dec 26, 2025, Jun 15, 2026, Mar 25, 2026…)
paid_on text 4 distinct values (Apr 30, 2026, Jan 9, 2026, Jul 10, 2026…)
quarterly_dividend number 1.06 to 1.11
amount_label text 2 distinct values (1.06, 1.11)
status text 2 distinct values (paid, upcoming)

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.

the exact SQL behind every number
SELECT
    toString(ex_dividend_date)                                    AS ex_date,
    concat(formatDateTime(max(record_date), '%b'), ' ', toString(toDayOfMonth(max(record_date))), ', ', toString(toYear(max(record_date)))) AS record_on,
    concat(formatDateTime(max(pay_date), '%b'), ' ', toString(toDayOfMonth(max(pay_date))), ', ', toString(toYear(max(pay_date))))          AS paid_on,
    round(toFloat64(max(cash_amount)), 3)                         AS quarterly_dividend,
    if(toInt64(max(cash_amount) * 1000) % 10 = 0,
       toString(toDecimal64(toFloat64(max(cash_amount)), 2)),
       toString(toDecimal64(toFloat64(max(cash_amount)), 3)))     AS amount_label,
    if(max(pay_date) >= today(), 'upcoming', 'paid')              AS status
FROM global_markets.stocks_dividends
WHERE ticker = 'MO'
  AND toYear(pay_date) = toYear(today())
GROUP BY ex_dividend_date
ORDER BY ex_dividend_date

Run your own version of this

The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.

More from this analysismo-dividend-increase-history
raises series 21×7 spinoff_resets series 16×3 cadence series 2×5 fcf_coverage table 6×5 One SPY $600 LEAPS call's price over two years (expired Jan 16 2026) series 470×2 2s10s spread, monthly average: last 20 years series 240×2 See all 2,214 queries →