You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle如何按日期降序、序列升序两个字段实现排名

SQL混合排序方向排名实现方案

你此前对RANK函数的认知存在偏差:所有支持窗口函数的数据库,窗口函数的ORDER BY子句都支持为每个排序字段独立指定升序(ASC,默认值)或降序(DESC),不需要所有字段统一排序方向,完全可以满足你的需求。

适用场景及对应实现

根据你的排名规则要求:先按Date字段降序排序,日期相同再按Seq字段升序排序,不同排名需求对应写法如下:

  • 如果你需要的是示例中连续不跳号、无并列排名的结果,使用ROW_NUMBER函数即可,输出和你的示例完全匹配:
SELECT 
    ID,
    Date,
    Seq,
    ROW_NUMBER() OVER (ORDER BY Date DESC, Seq ASC) AS Rank
FROM 你的表名;
  • 如果你需要相同Date和Seq的记录获得相同排名、后续排名跳号,使用RANK函数:
SELECT 
    ID,
    Date,
    Seq,
    RANK() OVER (ORDER BY Date DESC, Seq ASC) AS Rank
FROM 你的表名;
  • 如果你需要相同Date和Seq的记录获得相同排名、后续排名不跳号,使用DENSE_RANK函数,排序规则部分写法和上述完全一致。

以上写法在Oracle、MySQL 8.0+、PostgreSQL、SQL Server等所有支持标准窗口函数的数据库中都可以正常运行。

内容的提问来源于stack exchange,提问作者OracleUser2021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:18:00