所以我的表格中有以下数据
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
我希望我的结果是
id id2 flag
1 12 1
2 13 0
3 14 0
我如何构建这样的查询?
由于
EDIT1:抱歉,使用两列虚假数据无法正确反映我所面临的问题。我添加了另一列,这使问题复杂化。正如你所看到的,我无法对id2进行分组,因为它们都是唯一的。但是结果中应该省略id2 = 11的行。
EDIT2:将问题更改为使用'省略'而不是'删除'
EDIT3:
select id, id2, max(flag)
from table
group by id, id2
此查询返回所有4行,因为按ID2分组包括所有4行。
答案 0 :(得分: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
编辑(响应编辑#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
)
答案 1 :(得分:1)
;with CTE as
(
select
row_number() over (partition by id order by flag desc) as rn,
id,
id2,
flag
from myTable
)
SELECT * from CTE where rn = 1