密集等级跳过空值按倍数划分

Dense Rank Skip Null Values Partition by Multiple

我有一个 table,如下所示:

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

我想要 运行 一个 dense_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

你很接近。只需在 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