{"slug":"is-there-a-minimum-holding-period-for-stocks","qid":"dividend_cadence","label":"Average days between ex-dividend dates, 2021 to date","post_title":"Is There a Minimum Holding Period for Stocks?","post_url":"/blog/is-there-a-minimum-holding-period-for-stocks#q-dividend_cadence","columns":["ticker","payments","latest_ex_date","avg_days_between_ex_dates"],"rows":[{"ticker":"ABBV","payments":23,"latest_ex_date":"Jul 15, 2026","avg_days_between_ex_dates":91.3},{"ticker":"JPM","payments":23,"latest_ex_date":"Jul 6, 2026","avg_days_between_ex_dates":91.3},{"ticker":"CSCO","payments":23,"latest_ex_date":"Jul 6, 2026","avg_days_between_ex_dates":91.3},{"ticker":"PG","payments":23,"latest_ex_date":"Jul 24, 2026","avg_days_between_ex_dates":91.4},{"ticker":"CVX","payments":23,"latest_ex_date":"Aug 19, 2026","avg_days_between_ex_dates":91.4},{"ticker":"JNJ","payments":23,"latest_ex_date":"Aug 25, 2026","avg_days_between_ex_dates":91.4},{"ticker":"MSFT","payments":23,"latest_ex_date":"Aug 20, 2026","avg_days_between_ex_dates":91.4},{"ticker":"KO","payments":23,"latest_ex_date":"Sep 15, 2026","avg_days_between_ex_dates":91.5},{"ticker":"AAPL","payments":23,"latest_ex_date":"Aug 10, 2026","avg_days_between_ex_dates":91.5},{"ticker":"XOM","payments":23,"latest_ex_date":"Aug 17, 2026","avg_days_between_ex_dates":91.6}],"shape":"series","sql":"WITH deduped AS\n(\n    SELECT\n        id,\n        any(ticker)           AS sym,\n        any(ex_dividend_date) AS ex_date\n    FROM global_markets.stocks_dividends\n    WHERE ticker IN ('AAPL', 'MSFT', 'KO', 'JNJ', 'PG', 'XOM', 'CVX', 'JPM', 'ABBV', 'CSCO')\n      AND ex_dividend_date >= '2021-01-01'\n      AND ex_dividend_date <  '2026-10-01'\n    GROUP BY id\n)\nSELECT\n    sym                                                                   AS ticker,\n    count()                                                               AS payments,\n    formatDateTime(max(ex_date), '%b %e, %Y')                             AS latest_ex_date,\n    round(dateDiff('day', min(ex_date), max(ex_date)) / (count() - 1), 1) AS avg_days_between_ex_dates\nFROM deduped\nGROUP BY sym\nHAVING count() >= 8\nORDER BY avg_days_between_ex_dates","computed_at":"2026-10-05T15:13:23.839176+00:00","elapsed":0.002699361}