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

SQL使用ROW_NUMBER分区排序时同日期下优先指定STATIONERY为ROW_NUM=1的问题

解决方案

你需要在ROW_NUMBER()的窗口排序规则中新增二级排序条件,给PROD_CD = 'STATIONERY'的记录赋予更高的排序优先级即可,修正后的SQL如下:

SELECT PRODUCT_NUM, CO_Cd, PROD_CD, Date,
MASTER_ID,
ROW_NUMBER() OVER (
    PARTITION BY MASTER_ID 
    ORDER BY 
        Date,
        CASE WHEN PROD_CD = 'STATIONERY' THEN 1 
             WHEN PROD_CD = 'PRINTER' THEN 2 
             ELSE 3 END
) ROW_NUM
FROM MyTable
ORDER BY MASTER_ID

逻辑说明

  • 原有逻辑仅按Date升序排序,同日期下无明确排序规则,数据库会按照存储顺序随机分配行号
  • 新增的二级排序规则通过CASE语句实现:将STATIONERY类产品的排序权重设为1,PRINTER设为2,其余产品默认设为3,同日期下权重越小排序越靠前,刚好满足优先标记文具类产品为行号1的需求
  • 仅包含单条记录的分组不会受二级排序规则影响,原有业务逻辑完全保留

执行上述SQL后,MASTER_ID为10003493039的两条2021/1/1的记录中,PROD_CD = 'STATIONERY'的记录会被标记为ROW_NUM=1,PROD_CD = 'PRINTER'的记录为ROW_NUM=2,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:27:02