将日期从旧到新排列 SQL

Rank a date from oldest to newest SQL

这看起来很简单,但我的大脑无法正常工作,所以我想问一下小组。我想以类似于下面 table 的方式对日期进行排名。此 table 中还有其他字段,但如果日期重复,则同一日期的排名也可能重复,如下所示的 12/31 和 1/5

Date Rank
12/31/2020 1
12/31/2020 1
1/1/2021 2
1/2/2021 3
1/2/2021 3
1/3/2021 4
1/4/2021 5
1/5/2021 6
1/5/2021 6
1/7/2021 7
1/10/2021 8

我认为你应该使用 DENSE_RANKDistinct。所以,查询应该看起来像

 --Without Duplicate Dates
    Select Distinct YouDATE,
           DENSE_RANK() OVER(ORDER BY YourDateColumn) MyRANK
    FROM YourTable;
--With Duplicate Dates
    Select YouDATE,
           DENSE_RANK() OVER(ORDER BY YourDateColumn) MyRANK
    FROM YourTable;

注意:这段代码写在SQLSERVER中。请检查并告诉我。

你似乎想要dense_rank():

select t.*,
       dense_rank() over (order by date) as rank
from t;

假设 2021-01-02 的问题是问题中的错字。

如果“日期”上有时间成分,则转换为日期进行排序:

select t.*,
       dense_rank() over (order by convert(date, date)) as rank
from t;