{"slug":"how-monthly-returns-are-measured","qid":"spy_total_return","label":"SPY June 2026: price return vs total return (June ex-dividend included)","post_title":"How Monthly Stock Returns Are Measured","post_url":"/blog/how-monthly-returns-are-measured#q-spy_total_return","columns":["may_final_close","june_final_close","june_dividend_per_share","price_return_pct","dividend_contribution_pct","total_return_pct"],"rows":[{"may_final_close":756.4,"june_final_close":746.32,"june_dividend_per_share":1.9035,"price_return_pct":-1.33,"dividend_contribution_pct":0.25,"total_return_pct":-1.08}],"shape":"scalar","sql":"WITH px AS (\n    SELECT argMaxIf(cl, day, day <= '2026-05-31') AS may_close,\n           argMaxIf(cl, day, day <= '2026-06-30') AS jun_close\n    FROM (\n        SELECT ticker,\n               toDate(toTimeZone(window_start, 'America/New_York')) AS day,\n               argMinIf(toFloat64(open), window_start, rth) AS op,\n               argMaxIf(toFloat64(close), window_start, rth) AS cl\n        FROM (\n            SELECT ticker, window_start, open, close,\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 rth\n            FROM global_markets.delayed_stocks_minute_aggs\n            WHERE ticker IN ('NVDA', 'SPY')\n              AND window_start >= '2026-05-28 04:00:00'\n              AND window_start < '2026-07-01 08:00:00'\n        )\n        GROUP BY ticker, day\n    )\n    WHERE ticker = 'SPY'\n),\ndv AS (\n    SELECT sum(cash_amount) AS div_per_share\n    FROM global_markets.stocks_dividends\n    WHERE ticker = 'SPY'\n      AND ex_dividend_date >= '2026-06-01'\n      AND ex_dividend_date <= '2026-06-30'\n)\nSELECT round(may_close, 2) AS may_final_close,\n       round(jun_close, 2) AS june_final_close,\n       round(div_per_share, 4) AS june_dividend_per_share,\n       round(100 * (jun_close - may_close) / may_close, 2) AS price_return_pct,\n       round(100 * div_per_share / may_close, 2) AS dividend_contribution_pct,\n       round(100 * ((jun_close + div_per_share) - may_close) / may_close, 2) AS total_return_pct\nFROM px CROSS JOIN dv","computed_at":"2026-07-26T05:37:27.902090+00:00","elapsed":0.085262923}