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