2013-10-29 33 views
0

所以我在我的表中的下列數據省略重複的行然後選擇特定的標準

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行。

回答

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 
5

當您想要將其他條件應用於數據時,通常使用GROUP BY而不是DISTINCT。例如,如果你想保持的1flag如果存在的話,還是保持爲零,否則,你可以這樣做:

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 
) 
+0

我編輯我的問題。請看看:) – nobody

+0

我選擇先生答覆答案,因爲CTE可能是爲這種類型的查詢。 – nobody