Postgresql Посчитать уникальные текстовые значения в столбце нарастающим итогом (по месяцам)

Не могу сообразить, как посчитать нарастающим итогом количество уникальных id по месяцам (январь, январь+февраль, январь+февраль+март и т.д.). Использую код ниже, но он задваивает уникальные значения за январь+февраль, январь+февраль+март.

select 
    date_trunc('month', created_at) AS month,
    sum(count(distinct id)) OVER (ORDER BY date_trunc('month', created_at)) as cum_sum
from table
group by 1

На выходе хочется видеть таблицу:

месяц    количество_id
январь    91
февраль   166
март      205

Но я получаю такой результат:

месяц    количество_id
январь    91
февраль   257
март      462

Я пробовала различные вариации с параметрами окна, но не помогло.

Также я пробовала такой код:

SELECT 
    qu.created_at,
    sum(count(qu.id)) OVER (ORDER BY qu.created_at) as test_sum
FROM (
    SELECT 
        DISTINCT ON (id)  created_at, 
        dao_id
    FROM table 
    ORDER BY id, created_at
) AS qu
GROUP BY 1

Но этот код выводит уникальное количество id на каждый день, отобрать строки на последний день каждого месяца у меня не получилось, хотя данные в этом случаю отображаются верно.

Может кто-нибудь подскажет, в каком направлении двигаться?


Ответы (1 шт):

Автор решения: Oksana

Помог такой код:

select 
    month,
    sum(count(qu.id)) OVER (ORDER BY month) as num_used_feature_end_month
from (
    select 
        distinct on (id)  date_trunc('month', table.created_at) as month, 
        id
    from table
) AS qu
group by 1

→ Ссылка