2015-09-22 84 views
-1

對於「B號碼」 - (呼叫的號碼),請將每個事件限制爲3.也就是說,從「A號碼」列表中, - (撥打「B號碼」的號碼),我們可能會有多個人撥打同一個「B號碼」。在「B號碼」在總撥號列表中出現超過3次的情況下,請從後面的「A號碼」中刪除它們。ORACLE:如何檢查並刪除重複的列值

我想弄清楚如何檢查並刪除這些重複的「B編號」,當他們大於3次發生。

以下是表格結構的示例列表。

enter image description here

那麼,該數量爲B出現三個以上的時間,我想保留一些,但刪除數量爲B。任何想法?

+1

學校工作?你有什麼嘗試?它是如何去的? – jarlh

+0

記錄被刪除的邏輯是什麼? – Siyual

+0

你只想刪除「B」號碼或某些行? –

回答

1

將結果限制爲3 B Number最多可以使用row_number()分析函數輕鬆實現。

select a_number, b_number 
    from (select a_number, b_number, 
       row_number() over (partition by b_number order by null) as rn 
      from your_table) 
where rn <= 3 

然而,上述查詢不是明確的關於它將保留其 3行(order by null)。

如果您想在列表中保留B Number的前三次出現,那麼您需要一種方法來顯式定義列表的順序。你可能有時間戳嗎?

在任何情況下,任何領域(S)定義(一個或多個)列表的順序,使用的row_number()函數調用的order by子句中:

row_number() over (partition by b_number order by pick_an_ordering_column) 
+0

好的。訂單無關緊要。只有前三次出現的b號碼 –

+0

要按A號碼排序 –