Você pode conseguir isso aninhando duas funções de janela - a primeira para saber se o
src
valor alterado da linha anterior, o segundo para somar o número de alterações. Infelizmente, o Postgres não permite aninhar funções de janela diretamente, mas você pode contornar isso
com uma subconsulta:SELECT
id,
src,
sum(incr) OVER (ORDER BY id)
FROM (
SELECT
*,
(lag(src) OVER (ORDER BY id) IS DISTINCT FROM src)::int AS incr
FROM example
) AS _;