{"slug":"xom-dividend-increase-history","qid":"streak","label":"streak","post_title":"xom-dividend-increase-history","post_url":"/blog/xom-dividend-increase-history#q-streak","columns":["basis","years_counted","starting_year"],"rows":[{"basis":"Annual total per share above the prior year","years_counted":19,"starting_year":"run from 2007"},{"basis":"Calendar years with an increase declared","years_counted":5,"starting_year":"run from 2021"},{"basis":"Calendar years with no increase declared","years_counted":1,"starting_year":"latest 2020"}],"shape":"ranking","sql":"WITH quarterly AS\n(\n    SELECT\n        ex_dividend_date            AS ex_date,\n        toFloat64(max(cash_amount)) AS rate\n    FROM global_markets.stocks_dividends\n    WHERE ticker = 'XOM'\n      AND frequency = 4\n      AND ex_dividend_date >= '2005-01-01'\n      AND ex_dividend_date <= today()\n    GROUP BY ex_dividend_date\n),\nstepped AS\n(\n    SELECT\n        ex_date,\n        rate,\n        lagInFrame(rate) OVER (ORDER BY ex_date ASC\n            ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_rate\n    FROM quarterly\n),\nyearly AS\n(\n    SELECT\n        toYear(ex_date)                             AS y,\n        sum(rate)                                   AS total,\n        countIf(prev_rate > 0 AND rate > prev_rate)  AS raises\n    FROM stepped\n    WHERE toYear(ex_date) >= 2006\n      AND toYear(ex_date) < toYear(today())\n    GROUP BY y\n),\nframed AS\n(\n    SELECT\n        y,\n        total,\n        raises,\n        lagInFrame(total) OVER (ORDER BY y ASC\n            ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_total\n    FROM yearly\n),\nmarks AS\n(\n    SELECT\n        max(y)                                                             AS last_year,\n        greatest(maxIf(y, prev_total > 0 AND total <= prev_total), min(y))  AS last_total_break,\n        greatest(maxIf(y, raises = 0), min(y))                             AS last_rate_break,\n        countIf(raises = 0)                                                AS flat_years,\n        maxIf(y, raises = 0)                                               AS latest_flat_year\n    FROM framed\n)\nSELECT\n    tupleElement(t, 1)              AS basis,\n    toUInt32(tupleElement(t, 2))    AS years_counted,\n    tupleElement(t, 3)              AS starting_year\nFROM marks\nARRAY JOIN\n[\n    (toString('Annual total per share above the prior year'),\n     toInt32(last_year - last_total_break),\n     concat('run from ', toString(last_total_break + 1))),\n    (toString('Calendar years with an increase declared'),\n     toInt32(last_year - last_rate_break),\n     concat('run from ', toString(last_rate_break + 1))),\n    (toString('Calendar years with no increase declared'),\n     toInt32(flat_years),\n     if(flat_years = 0, 'none in window', concat('latest ', toString(latest_flat_year))))\n] AS t","computed_at":"2026-09-25T14:56:36.731850+00:00","elapsed":0.360849129}