求助:按MatchVar分组保留对应数量对照的SQL实现方案
解决方案:按MatchVar组筛选对应数量的对照行
我来帮你解决这个问题,核心问题其实是你之前的查询没有正确关联每个MatchVar对应的保留数量,导致逻辑出错。下面给你一个直接可行的方案:
先明确你的表结构(整理后)
表1 - 病例表
ID, MatchVar ID1, H2EF ID2, H2EF ID3, A3EF
表2 - 对照量表(#randomID_grouped)
ID, MatchVar, RandomNumber, RowCount ID1, H2EF, 34, 1 ID2, H2EF, 65, 2 ID3, H2EF, 75, 3
表3 - 匹配变量计数表(#table3)
MatchVar, Sum_of_Cases H2EF, 2 A3EF, 1
正确的SQL查询语句
SELECT t2.* FROM [#randomID_grouped] t2 INNER JOIN [#table3] t3 ON t2.MatchVar = t3.MatchVar WHERE t2.RowCount <= t3.Sum_of_Cases ORDER BY t2.MatchVar, t2.RowCount;
逻辑解释
- 关联匹配数量表:通过
MatchVar字段将对照量表(t2)和计数表(t3)做内连接,这样每一行对照都能获取到自己所属MatchVar组需要保留的对照数量Sum_of_Cases。 - 筛选符合条件的对照:用
RowCount <= t3.Sum_of_Cases筛选出每个组内前N个对照(N就是该组对应的病例数)。比如H2EF组保留RowCount≤2的对照,A3EF组保留RowCount≤1的对照。 - 排序优化:最后按
MatchVar和RowCount排序,方便你直观查看每个组的筛选结果。
为什么原来的方法不生效?
你之前的子查询SELECT MAX([sum_of_cases]) FROM [#table3] WHERE[Match_Variable] = [Match_Variable]里的Match_Variable = Match_Variable是字段自相等(相当于恒成立),所以返回的是整个#table3中最大的Sum_of_Cases(这里是2),而非当前MatchVar对应的数值,自然无法实现按组保留不同数量的需求。
内容的提问来源于stack exchange,提问作者tj123
相关产品推荐
相关产品推荐

