У меня есть таблица данных вызовов, я хочу подсчитать количество уникальных учетных записей, вызываемых каждый день, и взять сумму уникальных учетных записей, вызываемых ежемесячно

#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