明凯博客

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

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

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

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

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

1
2
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条。

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

语句:

1
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()来实现的,经过对比,这种效率最高,语句最简单。
语句:

1
2
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条的不连续记录的三种方法

发表评论

电子邮件地址不会被公开。 必填项已用*标注