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条的数据,第一条会取不到
但具体效率和性能没有测试
如有不妥,请大家留言指出并改进