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

按USERID获取SEQNBR最大值并排除含STATUS='CLE'的用户(禁用CTE及SELECT子查询)

解决你的SQL分组过滤问题

嘿,针对你的需求——按USERID分组取SEQNBR最大值,同时排除所有存在STATUS='CLE'记录的用户,而且不能用CTE和SELECT子查询,我给你两个实用的方案:

方案一:简洁的GROUP BY + HAVING(仅需USERID和最大值)

这是最直接的写法,用HAVING子句过滤掉包含STATUS='CLE'的用户分组,同时计算最大值:

SELECT 
    A.USERID,
    MAX(CONVERT(CHAR(10), A.SEQNBR, 120)) AS MAX_SEQNBR -- 保留你原有的CONVERT格式,按需调整参数
FROM 
    你的表名 A
GROUP BY 
    A.USERID
HAVING 
    COUNT(CASE WHEN A.STATUS = 'CLE' THEN 1 END) = 0;

逻辑拆解:

  • GROUP BY A.USERID:按用户ID分组,把同一个用户的所有记录归为一组
  • COUNT(CASE WHEN A.STATUS = 'CLE' THEN 1 END):统计每组中STATUS为'CLE'的记录数。如果用户有哪怕一条CLE记录,这个数就大于0;没有则为0
  • HAVING ... = 0:只保留那些完全没有CLE记录的分组,再用MAX()取出该组的最大SEQNBR

方案二:JOIN方式(需获取最大SEQNBR对应的完整行)

如果你需要的不只是最大值,还要这条最大SEQNBR记录的其他字段,可以用JOIN配合子查询(注意这里的子查询是在FROM里,不是SELECT子句内,符合你的限制):

SELECT 
    A.USERID,
    CONVERT(CHAR(10), A.SEQNBR, 120) AS MAX_SEQNBR,
    A.其他字段 -- 按需添加你需要的字段
FROM 
    你的表名 A
INNER JOIN (
    SELECT 
        USERID,
        MAX(SEQNBR) AS TOP_SEQ
    FROM 
        你的表名
    GROUP BY 
        USERID
    HAVING 
        COUNT(CASE WHEN STATUS = 'CLE' THEN 1 END) = 0
) B ON A.USERID = B.USERID AND A.SEQNBR = B.TOP_SEQ;

这个写法先筛选出符合条件的用户和他们的最大SEQNBR,再关联原表拿到对应的完整记录。

记得把代码里的你的表名替换成你实际使用的表名,CONVERT的参数也可以根据你的需求调整哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:49:16