{"slug":"portfolio-weighted-dividend-yield","qid":"income_by_month","label":"Dividend income from the five-name portfolio, by month","post_title":"Portfolio Dividend Yield: Weighted Average","post_url":"/blog/portfolio-weighted-dividend-yield#q-income_by_month","columns":["month","month_label","income_usd"],"rows":[{"month":"2025-09","month_label":"Sep 2025","income_usd":51},{"month":"2025-10","month_label":"Oct 2025","income_usd":104.81},{"month":"2025-11","month_label":"Nov 2025","income_usd":109.7},{"month":"2025-12","month_label":"Dec 2025","income_usd":51},{"month":"2026-01","month_label":"Jan 2026","income_usd":104.81},{"month":"2026-02","month_label":"Feb 2026","income_usd":109.7},{"month":"2026-03","month_label":"Mar 2026","income_usd":53},{"month":"2026-04","month_label":"Apr 2026","income_usd":107.76},{"month":"2026-05","month_label":"May 2026","income_usd":109.7},{"month":"2026-06","month_label":"Jun 2026","income_usd":53},{"month":"2026-07","month_label":"Jul 2026","income_usd":107.76},{"month":"2026-08","month_label":"Aug 2026","income_usd":109.7}],"shape":"series","sql":"WITH\n    positions AS\n    (\n        SELECT\n            tupleElement(p, 1)            AS ticker,\n            toFloat64(tupleElement(p, 2)) AS shares\n        FROM\n        (\n            SELECT arrayJoin([('MSFT', 30.), ('PG', 60.), ('XOM', 80.), ('KO', 100.), ('VZ', 60.)]) AS p\n        )\n    ),\n    payments AS\n    (\n        SELECT\n            ticker,\n            id,\n            any(ex_dividend_date)       AS ex_date,\n            toFloat64(any(cash_amount)) AS amount\n        FROM global_markets.stocks_dividends\n        WHERE ticker IN ('MSFT', 'PG', 'XOM', 'KO', 'VZ')\n          AND ex_dividend_date >  today() - 365\n          AND ex_dividend_date <= today()\n        GROUP BY ticker, id\n    )\nSELECT\n    formatDateTime(toStartOfMonth(pay.ex_date), '%Y-%m') AS month,\n    formatDateTime(toStartOfMonth(pay.ex_date), '%b %Y') AS month_label,\n    round(sum(pos.shares * pay.amount), 2)               AS income_usd\nFROM payments AS pay\nINNER JOIN positions AS pos ON pos.ticker = pay.ticker\nGROUP BY month, month_label\nORDER BY month","computed_at":"2026-08-22T04:18:19.978015+00:00","elapsed":0.035177771}