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)
我正在尝试 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)