明凯博客

关注网站技术,一个特立独行的程序员

Mssql取得第10到第20条的不连续记录的三种方法

首先选取的ID肯定是不连续的,所以不能用取得10-id-20的记录的方法。
一般在Ajax读取数据时会使用到,动态留言啊,加载文章啊等等。
比如说,按时间加载下10条,那就需要这种方法了,首先加载10条,然后是11到20条,以此类推。

假定我们有一个tbl表,然后需要依次选取按时间date倒序排序的10条数据。

首先想到的是第一种方法。
一、搜索前10条记录,指定不包括前10条。
这条语句是大家基本上能够想到的,基本思路是这样子的,但是效率很低。
语句:

select top 10 * from tbl where id not in 
(select top 10 id from tbl order by date desc)  order by date desc 

二、先按时间倒序选取20条,然后在结果中正序选10条。

这种想法就有点机智了,但是由于选出来的结构是正序的,可能需要第三次操作,但是效率比第一种略微高一点。

语句:

select top 10 * from (select top 20 * fromt tbl order by date desc) k order by date  

三、通过 row_number() over(order by name)来实现。
这种方法是通过row_number()来实现的,经过对比,这种效率最高,语句最简单。
语句:

select * from (select row_number()over(order by date desc) as rn,*  from tbl) k
where k.rn between 11 and 20

基本上就是这三种方法,明凯选用的就是第三种方法。

, , ,

相关文章

1 条评论 “Mssql取得第10到第20条的不连续记录的三种方法

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注