SPY Dividend Yield: Why It Trails the Index
Every SPY distribution over the last three years, against the share priceseries ·
2026-08-22 · 12×5
Days from ex-dividend date to pay date, last three yearsranking ·
2026-08-22 · 3×4
Trailing 12-month dividend yield: SPY against two open-end S&P 500 ETFsranking ·
2026-08-22 · 3×3
SPY by calendar year: price change against dividends collectedranking ·
2026-08-22 · 7×3
Every SPY distribution over the last three years, against the share price
Every SPY distribution over the last three years, against the share price
| ex_date | ex_date_label | pay_date_label | cash_amount | pct_of_price |
|---|---|---|---|---|
| 2023-09-15 | Sep 15, 2023 | Oct 31, 2023 | 1.5832 | 0.357 |
| 2023-12-15 | Dec 15, 2023 | Jan 31, 2024 | 1.9061 | 0.406 |
| 2024-03-15 | Mar 15, 2024 | Apr 30, 2024 | 1.5949 | 0.313 |
| 2024-06-21 | Jun 21, 2024 | Jul 31, 2024 | 1.759 | 0.323 |
| 2024-09-20 | Sep 20, 2024 | Oct 31, 2024 | 1.7455 | 0.307 |
| 2024-12-20 | Dec 20, 2024 | Jan 31, 2025 | 1.9655 | 0.333 |
| 2025-03-21 | Mar 21, 2025 | Apr 30, 2025 | 1.6955 | 0.301 |
| 2025-06-20 | Jun 20, 2025 | Jul 31, 2025 | 1.7611 | 0.296 |
| 2025-09-19 | Sep 19, 2025 | Oct 31, 2025 | 1.8311 | 0.276 |
| 2025-12-19 | Dec 19, 2025 | Jan 30, 2026 | 1.9934 | 0.293 |
| 2026-03-20 | Mar 20, 2026 | Apr 30, 2026 | 1.797 | 0.277 |
| 2026-06-18 | Jun 18, 2026 | Jul 31, 2026 | 1.9035 | 0.255 |
the exact SQL behind every number
WITH
divs AS
(
SELECT
ex_dividend_date AS ex_date,
any(pay_date) AS pay_date,
max(toFloat64(cash_amount)) AS cash_amount
FROM global_markets.stocks_dividends
WHERE ticker = 'SPY'
AND ex_dividend_date >= today() - 1095
AND ex_dividend_date < today()
GROUP BY ex_dividend_date
),
px AS
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
toFloat64(argMax(close, window_start)) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 1105
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY d
)
SELECT
toString(divs.ex_date) AS ex_date,
formatDateTime(divs.ex_date, '%b %e, %Y') AS ex_date_label,
formatDateTime(divs.pay_date, '%b %e, %Y') AS pay_date_label,
round(divs.cash_amount, 4) AS cash_amount,
round(divs.cash_amount / px.close_px * 100, 3) AS pct_of_price
FROM divs
INNER JOIN px ON px.d = divs.ex_date
ORDER BY ex_date
More from this analysisSPY Dividend Yield: Why It Trails the Index
SPY by calendar year: price change against dividends collected
ranking 7×3
→
Days from ex-dividend date to pay date, last three years
ranking 3×4
→
Trailing 12-month dividend yield: SPY against two open-end S&P 500 ETFs
ranking 3×3
→
$500 a month into SPY vs one lump sum, 2016 to 2026 (portfolio value, $ thousands)
series 126×4
→
See all 2,170 queries →