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

如何为分组内最大LevelID的行设置MaxLevel标识列?

如何为分组的最大编号行设置标识?

嘿,这个需求用窗口函数就能完美解决!我看了你提供的原查询和期望结果,核心就是要给每个WorkTypeId+WorktypeWorkID的分组标记出LevelID最大的行,下面直接上修改后的SQL:

SELECT 
    WorkTypeId, 
    WorktypeWorkID, 
    LevelID,
    CASE
        WHEN LevelID = MAX(LevelID) OVER (PARTITION BY WorkTypeId, WorktypeWorkID) THEN 1
        ELSE 0
    END AS MaxLevel
FROM Worktypes as w 
LEFT JOIN WorktypesWorks as ww on w.ID = ww.WorktypeID 
LEFT JOIN WorktypesWorksLevels as wwl on ww.ID = wwl.WorktypeWorkID

关键逻辑解释:

  • 窗口函数分组计算最大值:MAX(LevelID) OVER (PARTITION BY WorkTypeId, WorktypeWorkID)会针对每一行,计算它所属的WorkTypeId和WorktypeWorkID分组里的最大LevelID值,这个值会和当前行的其他字段一起返回。
  • CASE判断标记:用CASE语句对比当前行的LevelID和分组内的最大值,如果相等就返回1(表示是该分组的最大Level行),否则返回0。
  • 自动处理NULL行:对于那些WorkTypeId、WorktypeWorkID、LevelID全为NULL的行,MAX(LevelID)计算结果也是NULL,而SQL中NULL = NULL的判断结果是未知(UNKNOWN),所以会走到ELSE分支返回0,正好符合你的期望结果。

执行这个查询后,就能得到你想要的带MaxLevel列的结果,完全匹配你给出的期望输出哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:13:11