SELECT * FROM grda WHERE id IN (select id from (select DISTINCT id from grda order by id desc) where rownum <11)

解决方案 »

  1.   


    SELECT B.* FROM
    GRDA B
    INNER JOIN
    (SELECT ID FROM
    (SELECT DISTINCT ID, RANK() OVER (ORDER BY ID) AS RK FROM GRDA) A
    WHERE RK <= 10) C
    ON B.ID = C.ID
      

  2.   

    SELECT * 
    FROM grda 
    WHERE id IN (select id from (select DISTINCT id from grda order by id desc) 
    where rownum <11)
    order by id desc
      

  3.   

    select *
    from
    (
    select * from grda
    order by id desc)
    where rownum<11;
      

  4.   

    不好意思
    没有看清楚lz的东西
    更正如下SELECT * FROM CSDN.TABLE111
    WHERE ROWNUM <= 5
    ORDER BY ID DESC
      

  5.   

    晕,又写错了SELECT * FROM GRDA WHERE ROWNUM <= 你的数字 ORDER BY ID DESC
      

  6.   

    因为lz的是主键,所以没有必要去distinct了
      

  7.   

    真帅 长知识了 原来SELECT 语句可以这么写 
    智者留其名 多挂一天
      

  8.   

    晕了 原来这样写就行 
    "SELECT * FROM GRDA WHERE ROWNUM <= 你的数字 ORDER BY ID DESC"  呵呵 原来是先ORDER BY 后 WHERE 以为是先WHERE 后ORDER BY 呢 呵呵
      

  9.   

    虽然结帖了,但有点我还是要提出来的。
    不然我不会傻傻地去多嵌套一层。因为是先where rownum还是先order by并不是确定的,它与表的结构有关。
    我曾经做过实验的,你order by不同的字段可能得到的查询结果就不同,但它也不是先取前多少条。与oracle的优化机制有点关系。所以楼主要得到想要的结果还是要写成我那个样子!http://community.csdn.net/Expert/topic/4284/4284355.xml?temp=.4171717
    这是我去年提出来的问题,有些高手也作了相应的解释,但我还是有点疑惑的。
      

  10.   

    sbaz(万神渡劫) 的精神可嘉哦,hoho
    那我也补充一下
    如果要包上一层的话
    为什么不使用RANK?那个就绝对不会出现rownum的一些问题
      

  11.   

    呵呵 多谢sbaz(万神渡劫)和Reeezak(坚持信念) 帖子 
    今天突然想看看以前的帖子才看到二位的答案 的确如Reeezak(坚持信念) 所说 用RANK 和dense_rank 要好很多 再次感谢