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行.
如果要对数据应用其他条件,通常使用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)