SELECT 包含空值的最大排名

SELECT MAX RANK INCLUDING NULLS

我正在尝试 select 根据返回的行进行 MAX 排名,同时包括 row/s,它在 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

您可以使用行号来删除重复项

with mydata as
(
*your query here*
),
rankgen as
(
select mydata.*, row_number() over(partition by Name order by rank desc) rn
from mydata
)
select *
from rankgen 
where rn = 1

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

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

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