これは、2つのウィンドウ関数をネストすることで実現できます。最初の関数はsrc
かどうかを取得します。 値は前の行から変更され、2番目は変更の数を合計します。残念ながら、Postgresではウィンドウ関数を直接ネストすることはできませんが、
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 _;