平常工做中,常常要查询分组的前几名或查询数据的前几条记录(第5条到第十条)等。mysql
TOP-N分析法就是经过TOP-N算法从研究对象中获得所需的N个数据,并从排序列表中选取最大或最小的N个数据,这就是一个TOP-N算法。算法
mysql中用limit;oracle中用rownum。sql
mysql中没有top ,
你想查前几条数据 要用排序方试来查
order by id desc limit 0,10 按照id的倒序排序 取出前10条
order by id limit 5,10 按照id的正序排序 从第5条开始取10条网络
从mysql到oracle迁移一个程序,遇到了sql语句中的limit问题。oracle
查遍网络,所提供的方法都极其麻烦,不利于通用。函数
如下是个人解决方案,能够与limit媲美。spa
好比从一个mobileuser 用户表中查询2到6条记录,按照第一次使用时间排序。对象
mysql语句为:排序
SELECT userid,password,firstusetime from mobileuser ORDER BY firstusetime DESC limit 2,6;it
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;