{"slug":"dividend-increases-expected-this-month","qid":"by_year","label":"Declared vs. still expected: this month in each of the last six years","post_title":"Dividend Increases Expected This Month","post_url":"/blog/dividend-increases-expected-this-month#q-by_year","columns":["year","declared_in_month","not_declared_in_month","median_raise_pct"],"rows":[{"year":2021,"declared_in_month":10,"not_declared_in_month":3,"median_raise_pct":4.2},{"year":2022,"declared_in_month":12,"not_declared_in_month":1,"median_raise_pct":8.2},{"year":2023,"declared_in_month":13,"not_declared_in_month":0,"median_raise_pct":4.8},{"year":2024,"declared_in_month":13,"not_declared_in_month":0,"median_raise_pct":4.2},{"year":2025,"declared_in_month":13,"not_declared_in_month":0,"median_raise_pct":4},{"year":2026,"declared_in_month":3,"not_declared_in_month":10,"median_raise_pct":2.2}],"shape":"series","sql":"WITH changes AS\n(\n    SELECT\n        ticker,\n        ex_dividend_date,\n        declaration_date,\n        amount,\n        prev_amount,\n        (prev_amount > 0 AND amount > prev_amount\n             AND declaration_date > toDate('2000-01-01'))            AS is_raise,\n        (prev_amount > 0 AND amount < prev_amount)                   AS is_cut,\n        round((amount / prev_amount - 1) * 100, 1)                   AS raise_pct\n    FROM\n    (\n        SELECT\n            ticker,\n            ex_dividend_date,\n            declaration_date,\n            amount,\n            lagInFrame(amount, 1) OVER (PARTITION BY ticker ORDER BY ex_dividend_date\n                                        ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_amount\n        FROM\n        (\n            SELECT\n                ticker,\n                ex_dividend_date,\n                ifNull(max(declaration_date), toDate('1970-01-01')) AS declaration_date,\n                ifNull(max(toFloat64(cash_amount)), 0)              AS amount\n            FROM global_markets.stocks_dividends\n            WHERE toString(frequency) = '4'\n              AND ex_dividend_date >= toDate('2020-01-01')\n              AND ticker NOT IN ('SPCX')\n            GROUP BY ticker, ex_dividend_date\n        )\n    )\n),\nqualifiers AS\n(\n    SELECT ticker\n    FROM changes\n    GROUP BY ticker\n    HAVING uniqExactIf(toYear(declaration_date),\n                       is_raise AND (toYear(declaration_date) BETWEEN toYear(today()) - 5 AND toYear(today()) - 1)) = 5\n       AND uniqExactIf(toYear(declaration_date),\n                       is_raise AND (toYear(declaration_date) BETWEEN toYear(today()) - 5 AND toYear(today()) - 1)\n                                AND toMonth(declaration_date) = toMonth(today())) >= 4\n       AND countIf(is_cut AND ex_dividend_date >= addYears(toStartOfYear(today()), -5)) = 0\n)\nSELECT\n    spine.year                                                        AS year,\n    ifNull(r.names_declared, 0)                                       AS declared_in_month,\n    (SELECT count() FROM qualifiers) - ifNull(r.names_declared, 0)    AS not_declared_in_month,\n    ifNull(r.median_raise_pct, 0)                                     AS median_raise_pct\nFROM\n(\n    SELECT toUInt16(toYear(today()) - 5 + arrayJoin(range(6))) AS year\n) AS spine\nLEFT JOIN\n(\n    SELECT\n        toUInt16(toYear(declaration_date))          AS year,\n        uniqExact(ticker)                           AS names_declared,\n        round(quantileExact(0.5)(raise_pct), 1)     AS median_raise_pct\n    FROM changes\n    WHERE is_raise\n      AND toMonth(declaration_date) = toMonth(today())\n      AND ticker IN (SELECT ticker FROM qualifiers)\n    GROUP BY year\n) AS r ON r.year = spine.year\nORDER BY year","computed_at":"2026-09-16T15:03:53.505348+00:00","elapsed":4.6462157}