select * from 
(
select top 4 * from AA
order by id desc
) a 
order by id

解决方案 »

  1.   

    我想先要算出M后。用游标就可以了。游标是可以指到一个特定的位子的,在SQL的帮助里写的很清楚
      

  2.   

    create procedure pro_lianxi(@M int) as
    select *
    from AA
    where [id] between @M and (@M+4)
      

  3.   

    select top 4 * from AA
    where id not in (select top m-4 * from AA order by id)
    order by id
    //条件是m是定值,如果是参数,那么需要exec执行动态语句。
      

  4.   

    --测试表
    create table #table(typeid varchar(4),num int)insert #table values('1月',1)
    insert #table values('2月',2)
    insert #table values('3月',3)
    insert #table values('4月',4)
    insert #table values('5月',5)select * from #table
    --比如我要取第2到第4条记录
    select * from #table where typeid not in (select top 1 typeid from #table order by typeid) 
    and typeid not in (select top 1 typeid from #table order by typeid desc)
    --删除测试表
    drop table #table
    --结果typeid num         
    ------ ----------- 
    1月     1
    2月     2
    3月     3
    4月     4
    5月     5(所影响的行数为 5 行)typeid num         
    ------ ----------- 
    2月     2
    3月     3
    4月     4(所影响的行数为 3 行)
      

  5.   

    declare @m int,@sql varchar(8000)
    set @m=6
    set @sql=
    'select top 4 * from AA
    where id not in (select top '+convert(varchar,@m)+' ID from AA order by ID)
    order by ID'
    exec (@sql)
      

  6.   

    To:dutguoyi(新鲜鱼排)  这样也需要先知道m的值,/
    看了各位热心朋友的回复,我想通过两个procedure可以实现,先查询出所有的count
    一个procedure里如果我使用两个参数进行循环比较统计也可以,可能消耗资源比较多吧declare @nums int
    declare @tmpid int 
    declare @newid int
    set @tmpid=1
    set @nums=0
    while exists(select * from AA where  id=@tmpid)
    begin
    select  id from AA  where id=@tmpid
    set @tmpid=@tmpid+1
    set @nums=@nums+1
    end
    --得到记录集后再使用dutguoyi(新鲜鱼排)的方法做.