簡體   English   中英

在Oracle中使用ROWNUM獲得前5個結果

[英]Getting Top 5 Results using ROWNUM in Oracle

我的查詢有問題嗎? 我使用下面的方法獲得AUDIT_ACTN然后AUDIT_STAMP排序的前5個結果。

SELECT * FROM (SELECT * FROM TABLE_SAMPLE ORDER BY AUDIT_ACTN  
ASC,AUDIT_STAMP ASC)
WHERE ROWNUM <= 5

我用這個來檢查我是否得到了正確的行。

SELECT * FROM TABLE_SAMPLE  ORDER BY 
AUDIT_ACTN,AUDIT_STAMP

問題是第二個查詢的前5行與第一個查詢的結果略有不同。 只有3行是相同的,根據我的觀察,其他2行是第二個查詢的rownum1和2。 我希望你理解我的問題我真的需要幫助。謝謝!

我記得讀過ORDER BY不能保證使用子查詢,但是這里有一個使用ROW_NUMBER的替代解決方案 - 這包括它的OVER子句中的ORDER BY

SELECT * FROM 
(SELECT Field1, Field2, ROW_NUMBER() OVER (ORDER BY Field2,Field1) AS RN 
 FROM TABLE_SAMPLE 
 ) t 
WHERE RN <= 5

這是小提琴

這里有一些關於Oracle,子查詢和ORDER BY的文檔:

http://docs.oracle.com/javadb/10.8.2.2/ref/rrefsqlj13658.html

在子查詢中,ORDER BY子句沒有意義,除非它伴隨結果offset和fetch first子句中的一個或兩個,或者與ROW_NUMBER函數一起使用,因為不能保證順序保留在外部結果集中。 允許在外部查詢中將ORDER BY與子查詢中的ORDER BY組合使用。

祝好運。

試試這個:這個查詢返回前5條記錄。

 SELECT * FROM 
    (SELECT Field1, Field2, rank() OVER (ORDER BY Field1,Field2) AS rank
     FROM TABLE_SAMPLE 
     ) t 
    WHERE t.rank <= 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM