SQL Server RANK() 从 1 开始

阿南德

假设我有一张像:

create table t1 (d1 date)

没有钥匙,所以日期可以重复。我想按排名降序选择不同的日期,这样排名从 1 开始并按顺序递增。

Date         Rank
----------   ----
2020-01-29   1
2020-01-24   2
2020-01-22   3

我不是 SQL 专家,当我查找 doc 时,RANK()我发现排名数字是不确定的

因此,无论是否使用RANK().

我已经尝试过有人问过 ROW_NUMBER()

SELECT DISTINCT
    d1, ROW_NUMBER() OVER (ORDER BY d1) AS Rank  
FROM
    t1 
ORDER BY
    d1 DESC

但这会产生类似的东西:

Date         Rank
----------   ----
2020-01-29   123
2020-01-24   122
2020-01-22   121
松鼠

我想这就是你想要的。当你有重复的d1表,你需要group byd1

select d1, ROW_NUMBER() OVER (ORDER BY d1 DESC) AS [Rank]  
from    t1 
group by d1
order by d1 desc

或者如果您更喜欢使用 distinct

select  d1, rank() over (order by d1 desc) as [Rank]
from
(
    select  distinct d1
    from    t1 
) d
order by [Rank]

要么 dense_rank()

select  distinct d1, dense_rank() over (order by d1 desc) as [Rank]
from    t1
order by [Rank]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章