SELECT T_ID,T_DATE 
FROM (SELECT ROWNUM ID,T_ID,T_DATE FROM TABLE) 
WHERE rownum<=1100 AND rownum>1000 
ORDER BY T_DATE ASC; 
不知道是不是好用?

解决方案 »

  1.   

    SELECT T_ID,T_DATE 
    FROM (SELECT T_ID,T_DATE FROM TABLE ORDER BY T_DATE ASC) 
    WHERE ROWNUM<=1100 and ROWNUM>1000;
      

  2.   

    select *
    from (select rownum id,a.* from yourtable a order by t_date) b
    WHERE b.ID<=1100 AND b.ID>1000
      

  3.   

    select t_id,t_date from TABLE where rownum <1000 order by t_date asc minus select call_ani from phoneusers where rownum <1100 order by t_date asc这样应该是可以,不过用了MINUS可能效率比较低
      

  4.   

    select *
    from (select rownum ron,a.* from yourtable a order by t_date) b
    WHERE b.ron<=1100 AND b.ron>1000
      

  5.   

    这些方法都不太对吧?
    rownum是oracle记录里物理上的行数.不能跟排序放一起用,一起用的话,取出来的内容就不符合要求了.
      

  6.   

    楼上说的其实都不对,我已经测过了
    order by 不能和ROWNUM联用2楼跟我写的一样3,4,5,7楼根本就是错误的SQL语句难道题目真的那么难啊?
      

  7.   

    select *
    from (select rownum ron,a.* from yourtable a order by t_date) b
    WHERE b.ron<=1100 AND b.ron>1000
    我已测试通过
      

  8.   

    select *
    from (select rownum id,a.*
          from (select * from yourtable order by t_date) a) b
    WHERE b.ID<=1100 AND b.ID>1000
      

  9.   

    不对!rownum是物理纪录号,不能这样处理,应该自己的唯一表示号排序!!
      

  10.   

    to 楼上:
    rownum不是物理记录号,而只是一个伪列,rowid才是物理地址的!如果想去排序后的几条记录,大都是用rownum的!但一定要先order by,然后再用rownum,不要在同一个select ……里面。我后来写的这个肯定可以的!你可以测试一下。
      

  11.   

    楼上说的应该都不行,rownum不支持>=操作,只支持<或<=操作。
    你试试下列语句,我没把握:
    select T_ID,T_DATE from (select T_ID,T_DATE from table where rownum<1100 order by T_DATE ASC) minus select T_ID,T_DATE from table where rownum<1000 order bu T_DATE ASC
      

  12.   

    cyberflying(雁南飞) 的方法似乎是能出正确结果的!我理解这种方法实际上是:把所有记录都查出来重新排序后再取rownum,这种方法好象是基于牺牲效率的一种方法(没有测试),不可取!不如直接用select * from yourtable;后再取需要的行数来得好!不知道我的理解对不对??????
      

  13.   

    jin0607(dd)的方法肯定不对!
    不但效率低,结果也不是错误的!
      

  14.   

    不好意思,写错了!jin0607(dd)的方法肯定不对!
    不但效率低,结果也是错误的!
      

  15.   

    "rownum不支持>=操作,只支持<或<=操作"不是不支持>=,而是你如果直接where rownum > xxx的话,这个条件始终是false的,因为SQL执行时,选择第一条记录时rownum = 1,rownum > xxx为false,则不会再继续取数据了,rownum就不会再增长了。但是可以变通一下:将rownum 取出后起个别名,然后用别名来做比较就可以了。这是我的理解,不对的地方,大家一起讨论。
      

  16.   

    对,思想是这样的。我说的"比较"是指:别名(这儿是ID)可以用来 WHERE ID > 1000order by 本身就会很耗资源的,这儿可以在t_date上面建立索引。下面这个应该更好一些:select *
    from (select rownum id,a.*
          from (select * from yourtable order by t_date) a
          where rownum <= 1100) b
    WHERE b.ID>1000
      

  17.   

    这里有biti_rainy(biti_rainy)推荐的一篇文章,我觉得挺不错的,请参考:
    http://www.cnoug.org/bin/ut/topic_show.cgi?id=38&h=1&bpg=1&age=0
      
    同时,谢谢biti