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 |
基本上就是这三种方法,明凯选用的就是第三种方法。
AspPdf下载时提示PDF startxref not found的解决方法 淘宝客主题ZTao美丽说海阔主题粉色多功能主题
[…] Mssql取得第10到第20条的不连续记录的三种方法 […]