{"slug":"us-dividend-frequency-for-russian-investors","qid":"ex_date_gaps","label":"ex_date_gaps","post_title":"us-dividend-frequency-for-russian-investors","post_url":"/blog/lang/ru/us-dividend-frequency-for-russian-investors#q-ex_date_gaps","columns":["bucket","interval_count","share_pct","median_gap_days","median_gap_label"],"rows":[{"bucket":"шаг около месяца (до 45 дней)","interval_count":1859,"share_pct":36.6,"median_gap_days":29,"median_gap_label":"29 дней"},{"bucket":"квартальный шаг (46-120 дней)","interval_count":3090,"share_pct":60.8,"median_gap_days":91,"median_gap_label":"91 день"},{"bucket":"полугодовой шаг (121-250 дней)","interval_count":127,"share_pct":2.5,"median_gap_days":181,"median_gap_label":"181 день"},{"bucket":"годовой шаг (свыше 250 дней)","interval_count":4,"share_pct":0.1,"median_gap_days":364,"median_gap_label":"364 дня"}],"shape":"table","sql":"WITH liquid AS\n(\n    SELECT ticker\n    FROM global_markets.stocks_daily_aggs\n    WHERE date >= today() - 120\n      AND ticker NOT IN ('SPCX')\n    GROUP BY ticker\n    HAVING avg(volume) >= 1000000\n       AND avg(close)  >= 5\n),\nex_dates AS\n(\n    SELECT\n        d.ticker AS ticker,\n        arraySort(groupUniqArray(toUInt32(toDate(d.ex_dividend_date)))) AS day_numbers\n    FROM global_markets.stocks_dividends AS d\n    INNER JOIN liquid AS l ON l.ticker = d.ticker\n    WHERE d.ex_dividend_date >= today() - 400\n      AND d.ex_dividend_date <  today()\n      AND d.cash_amount > 0\n    GROUP BY d.ticker\n),\ngaps AS\n(\n    SELECT arrayJoin(arrayDifference(day_numbers)) AS gap_days\n    FROM ex_dates\n    WHERE length(day_numbers) >= 2\n)\nSELECT\n    bucket,\n    interval_count,\n    share_pct,\n    median_gap_days,\n    concat(toString(median_gap_days), ' ',\n           multiIf((median_gap_days % 10 = 1) AND (median_gap_days % 100 != 11), 'день',\n                   ((median_gap_days % 10) IN (2, 3, 4)) AND ((median_gap_days % 100 < 12) OR (median_gap_days % 100 > 14)), 'дня',\n                   'дней')) AS median_gap_label\nFROM\n(\n    SELECT\n        multiIf(g.gap_days <= 45,  'шаг около месяца (до 45 дней)',\n                g.gap_days <= 120, 'квартальный шаг (46-120 дней)',\n                g.gap_days <= 250, 'полугодовой шаг (121-250 дней)',\n                                   'годовой шаг (свыше 250 дней)') AS bucket,\n        count()                                     AS interval_count,\n        round(100.0 * count() / any(t.total), 1)    AS share_pct,\n        toUInt16(quantileExact(0.5)(g.gap_days))    AS median_gap_days\n    FROM gaps AS g\n    CROSS JOIN (SELECT count() AS total FROM gaps WHERE gap_days > 0) AS t\n    WHERE g.gap_days > 0\n    GROUP BY bucket\n)\nORDER BY median_gap_days","computed_at":"2026-09-25T15:19:08.390256+00:00","elapsed":4.406578635}