#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть таблица с 2 уникальными столбцами, в одном из которых указан номер учетной записи, а в другом — дата. Примерные данные приведены ниже.
Date account
9/8/2020 555
9/8/2020 666
9/8/2020 777
9/8/2020 888
9/9/2020 555
9/9/2020 999
9/10/2020 555
9/10/2020 222
9/10/2020 333
9/11/2020 666
9/11/2020 111
Я хотел бы рассчитать количество уникальных учетных записей, вызываемых каждый день, и суммировать его за месяц, например, если номер учетной записи 555 вызывается 8 сентября, 30 сентября и 20 сентября, он не суммируется с совокупной суммой, результат должен выглядеть следующим образом
date Cumulative Unique Accounts Called SO Far this month
9/8/2020 4
9/9/2020 5
9/10/2020 7
9/11/2020 8
Заранее благодарю вас за вашу помощь.
Комментарии:
1. Каждый день, даже по выходным?
Ответ №1:
Вы можете сделать это с помощью функций агрегирования и окна. Сначала получите первую дату для каждой учетной записи, затем агрегируйте и накапливайте:
select min_date,
count(*) as as_of_date,
sum(count(*)) over (partition by year(min_datedate), month(min_datedate)
order by min_date
) as cumulative_unique_count
from (select account, min(date) as min_date
from t
group by account, year(date), month(date)
) t
group by min_date;
Ответ №2:
Вы можете попробовать следующее —
with cte as
(
select date,count(*) as total from
(
select date,count,row_number() over(partition by count order by date) as rn
from tablename
)A where rn=1 group by date
)
select date,sum(total) over(order by date) as cum_sum
from cte