1. 程式人生 > >Oracle Top N 和 Oracle中的limit問題解決方案

Oracle Top N 和 Oracle中的limit問題解決方案

從mysql到oracle遷移一個程式,遇到了sql語句中的limit問題。
查遍網路,所提供的方法都極其麻煩,不利於通用。
以下是我的解決方案,可以與limit媲美。

比如從一個mobileuser 使用者表中查詢2到6條記錄,按照第一次使用時間排序。

mysql語句為:

SELECT userid,password,firstusetime from mobileuser ORDER BY firstusetime DESC limit 2,6;

oracle語句為:

SELECT * FROM ( SELECT userid,password,firstusetime, RANK() OVER (ORDER BY firstusetime DESC ) RN   FROM mobileuser ) WHERE RN between 2 and 6;


rank() over 函式代表排行依據,整個sql語句就是從根據“ORDER BY firstusetime DESC”這個標準,找到排行2到6位的資料。

但是存在一個問題,根據排行依據,有些資料是並列的,這樣返回的資料條數就會多於我們期望的。這時我們加一個rownum限制就行了。

SELECT * FROM ( SELECT userid,password,firstusetime, RANK() OVER (ORDER BY firstusetime DESC ) RN   FROM mobileuser ) WHERE RN between 2 and 6 and rownum<=5;