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

如何用SQL按层级筛选并排除前置重复值生成指定结果集?

解决方案:按层级优先级保留首次出现的数值

首先,我把你的原始数据和期望结果整理成更清晰的表格形式:

原始数据

FirstSecond
02561
52644
25893
25222
24891
25891
25225
52642
11455
88844

期望结果(注:推测你这里的258和025是笔误,应该对应原始数据的2589和0256)

HierNumber
12489
12589
10256
22522
25264
48884
51145

实现思路

核心逻辑很明确:每个数值只保留它最早出现的层级,后续层级中重复的数值直接剔除。我们可以借助窗口函数来标记每个数值的首次出现位置,再筛选出这些记录即可。

SQL代码实现

下面是通用的SQL写法(适配大多数支持窗口函数的数据库,比如PostgreSQL、MySQL 8+、SQL Server等):

WITH ranked_records AS (
    SELECT
        First AS Number,
        Second AS Hier,
        -- 给每个Number按层级从小到大排序,标记首次出现的记录
        ROW_NUMBER() OVER (PARTITION BY First ORDER BY Second) AS occurrence_rank
    FROM your_table_name -- 替换成你的实际表名
)
SELECT Hier, Number
FROM ranked_records
WHERE occurrence_rank = 1 -- 只保留首次出现的记录
ORDER BY Hier; -- 按层级顺序输出

代码解释

  1. CTE部分:用ROW_NUMBER()窗口函数,按First(最终的Number)分组,再按Second(层级)从小到大排序,给每个分组内的记录打上序号。序号为1的就是这个数值最早出现的层级记录。
  2. 筛选排序:只保留序号为1的记录,再按层级排序,就能得到完全符合需求的结果。

测试这个代码的话,会完美匹配你的要求:

  • 2589最早出现在层级1,所以层级3的那条被排除
  • 2522最早出现在层级2,所以层级5的那条被排除
  • 5264最早出现在层级2,所以层级4的那条被排除
  • 其他数值都是首次出现在对应层级,全部保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:40