2011-11-26 129 views
1

這是一個Oracle問題。選擇前5個最大值 - Oracle

我需要查找一系列記錄中前5個最大值。假設我有2000條記錄,並且有一列包含每條記錄中的數字值。我需要檢查這個號碼字段,並只選擇前5名最大。

所以,如果我在數列有這些值

22 
3 
44 
2 
23 
9 
4 
2 
99 

那麼下面將返回

22 
44 
23 
9 
99 

我目前有從現場分析的數值,因爲它是一個字符串。我用下面的方法解析它

REGEXP_SUBSTR(SUBSTR(ADDITIONAL_INFO, 1 , 
       INSTR(ADDITIONAL_INFO, ',', 1,1)), '[0-9]+') "CELLS" 

我在想可能會有循環,如果其他選擇涉及。如果這是C#,我可以在幾分鐘內完成。但是Oracle的語法讓我失望。

請幫忙。

+0

如果你的列(因爲我認爲)包含你所需要的數量和別的東西,請編輯您的問題,我們看一些排吧。 – Marco

回答

9

你可以嘗試:

SELECT * FROM 
    (SELECT ADDITIONAL_INFO FROM your_table 
    ORDER BY to_number(ADDITIONAL_INFO) DESC) r 
WHERE rownum <= 5 
+1

它不起作用('WHERE'必須在'ORDER BY'之前)。它應該是'但是SELECT * FROM(your_query沒有地方)一個WHERE rownum <6' – a1ex07

+0

@ a1ex07:是的,你是對的。我寫了我的查詢太快而沒有注意到我的錯。我剛剛編輯了我的答案。非常感謝! :) – Marco