{"slug":"how-monthly-returns-are-measured","qid":"spy_five_year","label":"SPY over five years, June 2021 to June 2026: price return vs return with dividends","post_title":"How Monthly Stock Returns Are Measured","post_url":"/blog/how-monthly-returns-are-measured#q-spy_five_year","columns":["june_2021_close","june_2026_close","dividends_paid_per_share","dividend_payments","five_year_price_return_pct","five_year_return_with_divs_pct","dividend_points_added"],"rows":[{"june_2021_close":428.07,"june_2026_close":746.32,"dividends_paid_per_share":34.07,"dividend_payments":20,"five_year_price_return_pct":74.35,"five_year_return_with_divs_pct":82.3,"dividend_points_added":7.96}],"shape":"scalar","sql":"WITH daily AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,\n           argMaxIf(toFloat64(close), window_start,\n               toTimeZone(window_start, 'America/New_York') >= toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 09:30:00'), 'America/New_York')\n               AND toTimeZone(window_start, 'America/New_York') < toDateTime(concat(toString(toDate(toTimeZone(window_start, 'America/New_York'))), ' 16:00:00'), 'America/New_York')) AS cl\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND ((window_start >= '2021-06-28 04:00:00' AND window_start < '2021-07-01 08:00:00')\n        OR (window_start >= '2026-06-26 04:00:00' AND window_start < '2026-07-01 08:00:00'))\n    GROUP BY day\n),\npx AS (\n    SELECT argMaxIf(cl, day, day <= '2021-06-30') AS start_close,\n           argMaxIf(cl, day, day <= '2026-06-30') AS end_close\n    FROM daily\n),\ndv AS (\n    SELECT round(sum(cash_amount), 2) AS divs_per_share,\n           count() AS payments\n    FROM global_markets.stocks_dividends\n    WHERE ticker = 'SPY'\n      AND ex_dividend_date >= '2021-07-01'\n      AND ex_dividend_date <= '2026-06-30'\n)\nSELECT round(start_close, 2) AS june_2021_close,\n       round(end_close, 2) AS june_2026_close,\n       divs_per_share AS dividends_paid_per_share,\n       payments AS dividend_payments,\n       round(100 * (end_close - start_close) / start_close, 2) AS five_year_price_return_pct,\n       round(100 * ((end_close + divs_per_share) - start_close) / start_close, 2) AS five_year_return_with_divs_pct,\n       round(100 * divs_per_share / start_close, 2) AS dividend_points_added\nFROM px CROSS JOIN dv","computed_at":"2026-07-26T05:37:28.080453+00:00","elapsed":0.088704017}