2012-05-01 70 views
1

我需要限制查詢的結果,但我無法實現我使用count和rownum所看到的任何示例。鑑於此表我可以使用IN和COUNT限制結果嗎?

rec error 
___ _____ 
    1 123 
    2 123 
    3 456 
    4 456 
    5 456 
    6 456 
    7 456 
    8 456 
    9 456 
10 789 
11 789 
12 789 
13 789 

此表有更多的行與許多不同的錯誤代碼。我正在使用它來獲取我需要的記錄:

select rec, error from table where error in (123,456,789) 

但是說我只想每個錯誤返回不超過2條記錄。我不知道如何做到這一點。如果我只是在尋找一個錯誤,我可以簡單地使用count或rownum。不確定如何在使用IN條件時執行此操作。

回答

1

你關心哪兩行你得到任何特定的錯誤代碼?像這樣的東西會得到兩行,每個錯誤代碼的值都是最小的。如果更改ROW_NUMBER分析函數中的ORDER BY,則可以更改返回哪兩行。

SELECT rec, 
     error 
    FROM (SELECT rec, 
       error, 
       row_number() over (partition by error 
             order by rec asc) rnk 
      FROM your_table_name) 
WHERE error in (123,456,789) 
    AND rnk <= 2 
+0

這很好用! – brandon

相關問題