省略重复行,然后根据特定条件选择幸存的行

nob*_*ody 0 sql t-sql sql-server

所以我的表中有以下数据

id   id2  flag
 1    11  0 <- this row should not be part of the result
 1    12  1 <- this row should survive the distinct operation
 2    13  0
 3    14  0
Run Code Online (Sandbox Code Playgroud)

我想要我的结果

id   id2  flag
 1    12  1
 2    13  0
 3    14  0
Run Code Online (Sandbox Code Playgroud)

我如何构建这样的查询?

谢谢

编辑1:抱歉,使用两列虚拟数据无法正确反映我面临的问题.我添加了另一列,这使问题复杂化.正如你所看到的,我无法对id2进行分组,因为它们都是唯一的.但是结果中应该省略id2 = 11的行.

编辑2:更改问题使用'省略'而不是'删除'

EDIT3:

select id, id2, max(flag)
from table
group by id, id2
Run Code Online (Sandbox Code Playgroud)

此查询返回所有4行,因为按ID2分组包括所有4行.

das*_*ght 5

如果要对数据应用其他条件,通常使用GROUP BY而不是DISTINCT.例如,如果您想保留它flag,1如果它存在,或者保持为零,否则您可以这样做:

SELECT id, MAX(flag) as flag -- Since 1 > 0, MAX() works fine
FROM myTable
GROUP BY id                  -- This keeps only distinct ids
Run Code Online (Sandbox Code Playgroud)

编辑:(回应编辑#2和3)

另一种解决方案是NOT EXISTS在子查询中使用,如下所示:

SELECT id, id2, flag
FROM myTable o
WHERE NOT EXISTS (
    SELECT * FROM myTable i WHERE o.id=i.id AND i.flag > o.flag
)
Run Code Online (Sandbox Code Playgroud)