Плотный ранг Пропустить разделение нулевых значений на несколько - PullRequest
1 голос
/ 29 января 2020

У меня есть таблица, которая выглядит следующим образом:

       Date      User      Product
 11/15/2019       123         NULL
 11/21/2019       123            A
 11/21/2019       123            A
 11/23/2019       123            B

Я хочу запустить функцию dens_rank, которая пропустит нулевые значения.

Ниже приведено то, что у меня есть:

CASE WHEN PRODUCT IS NOT NULL 
THEN DENSE_RANK() 
OVER (PARTITION BY USER ORDER BY DATE ASC) 
ELSE 1 
END DENSE_RANK_OUTPUT 

Мой текущий выход:

       Date      User      Product     DENSE_RANK_OUTPUT
 11/15/2019       123         NULL                     1
 11/21/2019       123            A                     2
 11/21/2019       123            A                     2
 11/23/2019       123            B                     3

Мой желаемый выход:

       Date      User      Product        DESIRED_OUTPUT
 11/15/2019       123         NULL                     1
 11/21/2019       123            A                     1
 11/21/2019       123            A                     1
 11/23/2019       123            B                     2

1 Ответ

3 голосов
/ 29 января 2020

Вы рядом. Просто используйте другую клавишу в partition by:

(CASE WHEN PRODUCT IS NOT NULL 
      THEN DENSE_RANK() OVER (PARTITION BY USER, (PRODUCT IS NOT NULL) ORDER BY DATE ASC) 
      ELSE 1 
 END) as DENSE_RANK_OUTPUT 
...