annual_totals
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-30, from jnj-dividend-2026.
| year | total_per_share | top_quarterly_rate | payments | first_ex_label | last_ex_label |
|---|---|---|---|---|---|
| 2016 | 3.15 | 0.8 | 4 | Feb 19 | Nov 18 |
| 2017 | 3.32 | 0.84 | 4 | Feb 24 | Nov 27 |
| 2018 | 3.54 | 0.9 | 4 | Feb 26 | Nov 26 |
| 2019 | 3.75 | 0.95 | 4 | Feb 25 | Nov 25 |
| 2020 | 3.98 | 1.01 | 4 | Feb 24 | Nov 23 |
| 2021 | 4.19 | 1.06 | 4 | Feb 22 | Nov 22 |
| 2022 | 4.45 | 1.13 | 4 | Feb 18 | Nov 21 |
| 2023 | 4.7 | 1.19 | 4 | Feb 17 | Nov 20 |
| 2024 | 4.91 | 1.24 | 4 | Feb 16 | Nov 26 |
| 2025 | 5.14 | 1.3 | 4 | Feb 18 | Nov 25 |
| 2026 | 3.98 | 1.34 | 3 | Feb 24 | Aug 25 |
- Rows × columns
- 11 × 6
- 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 |
text | 11 distinct values (2016, 2017, 2018…) | |
total_per_share |
number | 3.15 to 5.14 | |
top_quarterly_rate |
number | 0.8 to 1.34 | ratio or rate |
payments |
number | 3 to 4 | |
first_ex_label |
text | 8 distinct values (Feb 16, Feb 17, Feb 18…) | |
last_ex_label |
text | 9 distinct values (Aug 25, Nov 18, Nov 20…) |
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.
WITH per_ex AS
(
SELECT
toYear(ex_dividend_date) AS yr,
ex_dividend_date AS ex_date,
max(cash_amount) AS amt
FROM global_markets.stocks_dividends
WHERE ticker = 'JNJ'
AND ex_dividend_date >= '2004-01-01'
AND ex_dividend_date < '2027-01-01'
GROUP BY yr, ex_dividend_date
)
SELECT
toString(yr) AS year,
round(toFloat64(sum(amt)), 4) AS total_per_share,
round(toFloat64(max(amt)), 4) AS top_quarterly_rate,
count() AS payments,
formatDateTime(min(ex_date), '%b %e') AS first_ex_label,
formatDateTime(max(ex_date), '%b %e') AS last_ex_label
FROM per_ex
WHERE yr >= 2016
GROUP BY yr
ORDER BY yr
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.