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