【问题标题】:Rank a date from oldest to newest SQL从最旧到最新的 SQL 对日期进行排序
【发布时间】:2021-04-30 00:01:23
【问题描述】:

这看起来很简单,但我的大脑无法正常工作,我想我会问小组。我想以类似于下表的方式对日期进行排名。此表中还有其他字段,但如果日期重复,则排名也可以在同一日期重复,如下所示 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

【问题讨论】:

  • 嘿,请检查答案,让我这就是您要问的吗?如果没有,请编辑您的帖子并提供示例输入和输出。
  • 为什么 2021-01-02 有两个不同的排名,而其他日期只有一个?
  • @gordonLinoff。接得好。其实应该是一样的

标签: sql date snowflake-cloud-data-platform window-functions rank


【解决方案1】:

你似乎想要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;

【讨论】:

  • 谢谢@Gordon。这正是我想要的。
【解决方案2】:

我认为你应该使用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;

注意:此代码是用 SQL SERVER 编写的。请检查并告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2016-07-14
    • 2016-10-23
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多