SQL limit的方法

大家都知道,Mysql 和 Oracle中都有可以实现LIMIT的方法,现在有了SQL:2003标准的分析函数,MSSQL 和DB2 都可以实现了

使用SQL:2003标准中的分析函数(窗口函数): ROW_NUMBER() ,RANK(),DENSE_RANK()

使用方法:

SELECT    row_number() over (order by autoid desc) as rownumber, autoid,userid, matype,maxrate,setrate
    FROM         B_ProxySet

 

由此获得连续编号的列,做为LIMIT范围列,不管Autoid列是连续还是中断的,

下面是我引用该知识实现的LIMIT功能,使用命名子查询:

SELECT    * 
from (
    SELECT    row_number() over (order by autoid desc) as rownumber, autoid,userid, matype,maxrate,setrate
    FROM         B_ProxySet)  as t
Where t.rownumber> 4 And t.rownumber <= 10

 

最近发现Access中实现Limit方法的创意写法

使用2次top出来的数据做左连接,取出重叠部分的数据,看例子:

SELECT a.*

FROM (select top 20 * from view_siminfo) a left join

  (select top 40 * from view_siminfo) b

  on a.sn = b.sn

Where iif(b.sn,'0','1')='1'

 再次测试发现,第20条的记录去不得,必须从19-402个top记录里取,才能满足

也就是说,如果查询最前面的10条,就是1-10条的数据,第一条会取不到

但具体效率和性能没有测试

如有不妥,请大家留言指出并改进

posted @ 2011-07-18 18:11  叮/当  阅读(4065)  评论(0编辑  收藏  举报