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

SQL中双条件使用RANK()排序时如何保留JobTitle空值新记录

可行实现方案

直接调整窗口函数的排序逻辑,不需要加WHERE条件过滤NULL值,就能同时满足两个要求:既可以拿到每个Email分组下最新的非空JobTitle,又能完整保留JobTitle为NULL的记录。

核心修改逻辑

把原来单字段排序的规则改成两层优先级排序:

  • 第一优先级:区分JobTitle是否为空,非空记录的排序优先级高于空值记录,保证非空的有效职位能被优先选中
  • 第二优先级:同优先级下按LastUpdated倒序,保证最新更新的记录排在前面

修改后的RANK函数代码如下:

RANK() OVER (
    PARTITION BY Email
    ORDER BY
        -- 非空JobTitle标记为0排在前面,空值标记为1排在后面,不做删除
        CASE WHEN JobTitle IS NOT NULL THEN 0 ELSE 1 END ASC,
        LastUpdated DESC
) AS [Rank]

效果说明

  • 所有JobTitle为NULL的记录会完整保留在结果集中,不会因为过滤丢失
  • 每个Email分组下,最新更新的那条带有效JobTitle的记录会排在非空记录的最前位,取[Rank] = 1就能拿到该用户最新的职位信息
  • 空值记录的Rank序号会正常生成,不会干扰有效职位的提取逻辑

如果后续需要拆分统计:要取有效职位就筛选JobTitle IS NOT NULL AND [Rank] =1,要统计未填写职位的新增用户直接筛选JobTitle IS NULL即可,两类数据互不影响。

示例数据集参考

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:54:22