Есть ли способ для diff_rank () для каждой строки в диапазоне дат? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь получить количество уникальных элементов в столбце с указанным идентификационным номером и датой в течение последних 12 месяцев. Мне нужно повторить это для каждой строки в моей таблице.

Я использую комбинацию dens_rank () и (Over partition by, чтобы вычислить количество уникальных элементов, но я не смог успешно добавить в фильтр даты. Результаты, которые я вижу до сих пор, показывают количество уникальный Unique_Code для каждой строки с одинаковым идентификатором независимо от даты.

select ID, 
       Unique_Code, 
       Transaction_Date,  
       DATEADD(Month, -12, Transaction_Date) as L12M,
       dense_rank() over (partition by ID order by Transaction_Date, Unique_Code) as [Unique_Count]
            from (select *, (case when datediff(day, lag(Transaction_Date,1,Transaction_Date) over (partition by Unique_Code order by ID), Transaction_Date)
             <= 1 
                      then 1 else 2 
                 end) as grp
      from datatable1)

Я ожидаю, что в результатах будет показано количество уникальных элементов из столбца unique_code для идентификатора в строке, и где предыдущие записи в этом же идентификаторе соответствуют дате транзакции и дате транзакции - 12 месяцев. Сейчас я вижу количество уникальных элементов из столбца unique_code для каждой записи с одинаковым идентификатором независимо от диапазона дат.

Table of expected results

1 Ответ

0 голосов
/ 18 апреля 2019

К сожалению, у меня нет ваших исходных данных для тестирования, однако я добавил дополнительный столбец к вашему ниже:

select
    ID
,   Unique_Code
,   Transaction_Date
,   DATEADD(Month, -12, Transaction_Date) as L12M
,   dense_rank() over (partition by ID order by Transaction_Date, Unique_Code) as [Unique_Count]
,   rank() over (partition by Transaction_Date order by ID) NewUniqueCount
from (select *, (case   when datediff(day, lag(Transaction_Date,1,Transaction_Date) over (partition by Unique_Code order by ID), Transaction_Date) <= 1 
                        then 1 else 2 end) as grp from datatable1)

Дайте мне знать, если это работает?- Это должно работать.

...