--10%~20%
select top 10 PERCENT from 表名
where 主键 not in (select top 10 percent 主键 from 表 order by 排序字段)
order by 排序字段--20%~30%
select top 10 PERCENT from 表名
where 主键 not in (select top 20 percent 主键 from 表 order by 排序字段)
order by 排序字段
select top 10 PERCENT from 表名
where 主键 not in (select top 10 percent 主键 from 表 order by 排序字段)
order by 排序字段--20%~30%
select top 10 PERCENT from 表名
where 主键 not in (select top 20 percent 主键 from 表 order by 排序字段)
order by 排序字段
解决方案 »
- 无法返回Recordset数据
- 如何取一天24小时内各小时段
- 这样用linkedserver为什么不可以?
- 在负载测试的时候报错的错误是SQL Server]已超过了锁请求超时时段
- 我想把触发器中的一个变量值取出来用,该怎么办
- 真不该如何描述这样的问题
- MySQL和MSSQL数据库如何同步
- 在SQL 2005中的触发器问题
- 邹建大哥:[Unable to read local eventlog reason: 事件日志文件已在读取间更改.]
- SQL Server 出错!急!!!!Who help me!!!
- 非常简单的sql动态语句问题,关于字符串边界符,但一直搞不懂
- 在创建视图时自定义列需要定义列的数据类型,请问都有多少数据类型,其格式应该怎么写?
top 10 PERCENT *
from
#t
where
rowid not in (select top 10 percent rowid from 表 order by rowid)
order by
rowidselect
top 10 PERCENT *
from
#t
where
rowid not in (select top 20 percent rowid from 表 order by rowid)
order by
rowid
SELECT TOP 10 * FROM 表 WHERE 主键>(SELECT MAX(主键) FROM (SELECT TOP 10 主键 FROM 表 ORDER BY 主键) A) ORDER BY 主键-- 21-30
SELECT TOP 10 * FROM 表 WHERE 主键>(SELECT MAX(主键) FROM (SELECT TOP 20 主键 FROM 表 ORDER BY 主键) A) ORDER BY 主键
select identity(int,1,1) TID,* into #Temp from TGetvaluedeclare @iMax int,@iPercentOne decimal(18,2),@iPercentTwo decimal(18,2)
select @iMax=max(TID) from #Temp
select @iPercentOne =0.2,@iPercentTwo=0.3select * from #Temp
where TID between round(@iMax*@iPercentOne,0) and round(@iMax*,@iPercentTwo,0)
1.如果有key值,那么将是很到达到目的!本来你要按照第几行来取,玩的就是类似rowid,有key值,就相当于每行都有个序号,我是一号,不管我排在第一还是中间,都可以区别开来!所以只要有key值,完全可以 vivianfdlpw(), xueguang(xg) 的方法,他的方法也是等价于这样:
select top 10 PERCENT from 表名 A1
where not exists(select top 1 A1.key字段 from (select top 10 percent key字段 from 表)A2 where A2.key字段 = A1.key字段)---/*这里不用排序,就是取物理顺序,这样遇到有key值,但是排序杂乱无章的也是ok!*/2. libin_ftsafe(子陌红尘), Hopewell_Go的方法就是死马当活马医,人称D.I.Y自制ROWID的临时表造序号!好多那种非常刁难的报表格式,用此法,保管制的死死的,呵呵!
--简单测试了一下各语句的执行效率,查询出的结果一致,各语句都不是首次执行,因此物理读和预读都是0,测试表有二十多万条记录,有主键
select top 10 * from TEST
where ID not in (select top 100000 ID from TEST order by ID)
/*
SQL Server 分析和编译时间:
CPU 时间 = 10 毫秒,耗费时间 = 13 毫秒。(所影响的行数为 10 行)表 'TEST'。扫描计数 2,逻辑读 7064 次,物理读 0 次,预读 0 次。SQL Server 执行时间:
CPU 时间 = 369 毫秒,耗费时间 = 369 毫秒。
*/select top 10 * from TEST A1
where not exists(select top 1 A1.ID from (select top 100000 ID from TEST)A2 where A2.ID = A1.ID)/*
SQL Server 分析和编译时间:
CPU 时间 = 13 毫秒,耗费时间 = 13 毫秒。(所影响的行数为 10 行)表 'TEST'。扫描计数 2,逻辑读 7064 次,物理读 0 次,预读 0 次。SQL Server 执行时间:
CPU 时间 = 371 毫秒,耗费时间 = 404 毫秒。
*/SELECT TOP 10 * FROM TEST WHERE ID>(SELECT MAX(ID) FROM (SELECT TOP 100000 ID FROM TEST ORDER BY ID) A)/*
SQL Server 分析和编译时间:
CPU 时间 = 10 毫秒,耗费时间 = 12 毫秒。(所影响的行数为 10 行)表 'TEST'。扫描计数 2,逻辑读 3535 次,物理读 0 次,预读 0 次。SQL Server 执行时间:
CPU 时间 = 120 毫秒,耗费时间 = 120 毫秒。*/