select top 20 id from table where id not in(select top 40 id from table order by time) order by time

解决方案 »

  1.   

    你用的两个top所选出来的数据是不能比较的头一个选出的是没排序的,后一个是经过排序的啊
      

  2.   

    你是要对结果进行排序吗。就用select top 20 id from table where id not in(select top 40 id from table order by time) order by time
      

  3.   

    select top 20 id from table where id not in (select top 40 id from table order by time desc) order by time desc
      

  4.   

    --用这个:
    select top 20 [id] from yourtable where [id] in(select top 60 [id] from yourtable order by [id] ASC)
    ORDER BY [ID] DESC
      

  5.   

    我需要的是对时间数据排序后搜索。
    pbsql(风云)兄的方法试过,还是错误数据
      

  6.   

    select top 20 [id] from yourtable where [id] not in(select top 40 [id] from  yourtable order by [id] asc) order by [id] asc
      

  7.   

    查询N-M条记录?描述:要从记录集中取出中间一段记录来(如: 取10条中的第3-8条)解决思路:1.       有关键字或确保唯一的候选关键字字段:方法1:从第n条记录开始取m-n+1条数据                    方法2:升序取前m条记录最为a, 再降序从a中取m-n+1条记录作为b2.       没有上述字段:增加一个自增字段生成一个临时表,在从临时表中取记录[Where 自增字段名>n-1]实例:      --      --取第4到第7条记录 [对1方法一]SELECT top 4 * FROM jobs WHERE job_id not in (SELECT top 3 job_id FROM jobs)--[方法二]SELECT top 4 * FROM(SELECT top 4 * FROM(SELECT top 7 * FROM jobs ORDER BY job_id ASC)  aORDER BY job_id DESC) bORDER BY job_id ASC--取第2到第3条记录 [对1方法一]select IDENTITY(int,1,1) as iid,* into #temptable from discounts select top 2 * from #temptable where iid>=2
      

  8.   

    wanyingsong(豌豆) 兄,你的方法与他们的都一样,结果还是错误数据,而且我的需求是对时间排序
      

  9.   

    zzcwhq(zzcwhq) 的试过了,还是错误数据。我一开始也觉得应该这么写,结果数据就是错误。大家可以试试。
      

  10.   

    or:
    select top 20 * from (select top 60 * from table order by time asc) b
    order by time desc
      

  11.   

    AntingZ(夕惕若) 兄,我的ID 是唯一的
    jackxing(Jack) 兄,我是要按时间排序。而且是先排序再获得结果。根本的需求就是根据时间排序获取分页显示记录
      

  12.   

    select top 20 id from table where id not in(select top 40 id from table order by time) order by time
    应该是没有问题的,楼主把有问题的数据帖出来给大家测试一下.
      

  13.   

    --大家看看下面的测试就知道是怎么回事了--示例数据
    declare @t table(a int primary key,b int)
    insert @t select 1,9
    union all select 2,8
    union all select 3,7
    union all select 4,6
    union all select 5,5
    union all select 6,4
    union all select 7,3
    union all select 8,2
    union all select 9,1--查询1
    select top 2 * from @t
    where a not in(select top 2 a from @t order by b desc)/*--结果a           b           
    ----------- ----------- 
    3           7
    4           6(所影响的行数为 2 行)
    --*/
    --查询2
    select top 2 * from @t
    where a not in(select top 2 a from @t order by b desc)
    order by b /*--结果a           b           
    ----------- ----------- 
    9           1
    8           2(所影响的行数为 2 行)
    --*/
      

  14.   

    对于上面的测试在查询1中,得到的结果是排除了
    b=8,9两条记录后的结果中,取前两条,就是取b=7,6两条在查询2中,得到的结果是排除了
    b=8,9两条记录后的结果中,先按b从小大大排序,再取前两条,就是b=1,2的两条这显然是与要求不符合的,要求是先取数,再排序,而处理则变成了先排序,再取数
    结果当然不对
      

  15.   

    --正确的做法:select * from(
    select top 20 id from table where id not in(select top 40 id from table order by time desc)
    )a order by time