首页 > 解决方案 > 选择包含 NULL 的 MAX RANK

问题描述

我试图MAX从返回的行中选择排名,同时包括Award Date字段中包含 NULL 值的行。我该怎么办?

SELECT 
    V.Name
    ,Selected
    ,SRV.SBID
    ,SRV.DateCreated
    ,SRV.Version
    ,[Awarded] = ARW.DateCreated 
    ,[Rank] = CASE WHEN ARW.DateCreated IS NOT NULL THEN DENSE_RANK() OVER (PARTITION BY SRV.SBID ORDER BY ARW.DateCreated ) ELSE 0 END
FROM SRV
LEFT JOIN ARW ON ARW = SRV.ID
LEFT JOIN V   ON V.ID = SRV.VALUE
WHERE SRV.SBID = 767 

当前输出:

Name   Selected ID  Date                   Num  Award Date             Rank
AM Demo     1   767 2020-01-09 14:39:25.180 3   NULL                    0
Ven Two     1   767 2020-01-09 14:39:26.383 3   2020-01-09 14:42:23.677 2
Ven Two     1   767 2020-01-09 14:39:26.383 3   2020-01-15 14:41:05.680 3

所需输出:

Name   Selected ID  Date                   Num  Award Date             Rank
AM Demo     1   767 2020-01-09 14:39:25.180 3   NULL                    0
Ven Two     1   767 2020-01-09 14:39:26.383 3   2020-01-15 14:41:05.680 3

标签: sqltsqlmaxdense-rank

解决方案


在查询中再添加一个字段:

 ,[Rank2] = CASE 
              WHEN ARW.DateCreated IS NOT NULL 
                     THEN DENSE_RANK() OVER (PARTITION BY SRV.SBID 
                                             ORDER BY ARW.DateCreated DESC) 
              ELSE 0 
            END

然后,在外部查询中,选择行Rank2 IN (0,1)


推荐阅读