ВЫБЕРИТЕ МАКСИМАЛЬНЫЙ РАНК, ВКЛЮЧАЯ НУЛЬ - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь выбрать рейтинг MAX из строк, возвращаемых в то же время, включая строку / строки, которые содержат значения NULL в поле Award Date. Как бы я go об этом?

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

Ответы [ 2 ]

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

Добавьте еще одно поле в свой запрос:

 ,[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)

1 голос
/ 15 января 2020

Вы можете использовать номер строки, чтобы избавиться от дубликатов

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
...