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

基于分析条件筛选Oracle表行:按ID分组自定义排序

嘿,我来帮你搞定这个Oracle分组排序的需求,先把示例数据整理清楚,再给你对应的SQL实现哈~

示例数据表
idstart_dtcancel_dtrecord_eff_dtlatest_row_flag
1nullnull01/01/2018N
101/02/201801/02/201801/02/2018N
101/03/2018null01/03/2018Y
2null01/04/201801/04/2018Y
301/05/2018null01/05/2018N
3null01/06/201801/06/2018Y
分组排序规则

我们需要按id分组(PARTITION BY id),排序优先级如下:

  • 最高优先级(排名1):当start_dt不为空、cancel_dt为空且latest_row_flag = 'Y'的记录
  • 其余记录:我默认按record_eff_dt倒序排列(因为你没给出剩余条件,这个规则可以根据你的实际需求调整)
实现SQL代码
SELECT 
    t.*,
    ROW_NUMBER() OVER (
        PARTITION BY t.id 
        ORDER BY 
            -- 标记符合条件1的记录为最高优先级
            CASE 
                WHEN t.start_dt IS NOT NULL AND t.cancel_dt IS NULL AND t.latest_row_flag = 'Y' THEN 1 
                ELSE 2 
            END ASC,
            -- 其他记录按生效日期倒序,可按需修改
            t.record_eff_dt DESC
    ) AS row_rank
FROM 
    your_table_name t;

代码说明

  • 用ROW_NUMBER()窗口函数实现分组内的排名,PARTITION BY id保证每个id单独排序
  • CASE表达式把符合条件1的记录标记为1,其他为2,升序排列后符合条件的自然排第一
  • 后面的record_eff_dt DESC是给其余记录的排序规则,你可以换成你需要的其他条件,比如cancel_dt或者latest_row_flag的顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:22:59