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

SQL查询:找出同一ID和Version下Type A与B的Value不同的行

解决SQL筛选ID-Version分组下A/B Value不同的行的问题

没问题,我来帮你搞定这个查询需求。根据你的描述,我们需要找出所有同一ID和Version组合中,Type为A和B对应的Value不相等的行,也就是只保留那些分组里A、B值不一样的组的全部记录。

方法一:使用窗口函数(推荐,简洁高效)

这种方法利用窗口函数计算每个ID-Version分组的最大和最小Value,只要最大和最小值不相等,就说明该分组里存在不同的Value(也就是A和B值不一样),随后筛选出这些行即可:

SELECT ID, Version, Type, Value
FROM (
    SELECT 
        ID, Version, Type, Value,
        -- 计算当前ID-Version分组的最大Value
        MAX(Value) OVER (PARTITION BY ID, Version) AS max_val,
        -- 计算当前ID-Version分组的最小Value
        MIN(Value) OVER (PARTITION BY ID, Version) AS min_val
    FROM your_table_name -- 替换成你的实际表名
) AS subquery
-- 筛选出分组内最大最小Value不等的行
WHERE max_val != min_val;

方法二:使用分组筛选+自连接

先通过分组找出所有Value存在差异的ID-Version组合,再关联原表取出这些组合的所有行:

SELECT t.*
FROM your_table_name t -- 替换成你的实际表名
INNER JOIN (
    -- 找出所有ID-Version分组中,Value的不同值数量大于1的组
    SELECT ID, Version
    FROM your_table_name
    GROUP BY ID, Version
    HAVING COUNT(DISTINCT Value) > 1
) AS diff_groups 
    ON t.ID = diff_groups.ID 
    AND t.Version = diff_groups.Version;

验证结果

用你提供的测试数据运行上述任意一种查询,都会返回唯一符合条件的ID-Version组合(121-1)的两行数据:

IDVersionTypeValue
1211A100
1211B200

记得把代码里的your_table_name替换成你实际使用的表名哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:37:31