[英]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.