如何按id降序取前十条记录??

解决方案 »

  1.   

    select * from test where rownum <=10 order by id 
      

  2.   

    select * from test where rownum <=10 order by id desc
      

  3.   

    bs,这简单还写错
    select id,name from (select rownum rn,id,name from test order by id) where rn <=10;
      

  4.   

    select * from tablename where rownum <= 10 order by id desc
      

  5.   

    不可以用limit offset嘛?
      

  6.   

    select * from (select rownum as id from A order by id desc) where rownum <=10
      

  7.   

    好象yf520gn 写的是正确的
     select * from (select rownum as id from A order by id desc) where rownum <=10
      

  8.   

    select * from table_1  order by id desc limit 10 offset 0
      

  9.   

    -- 正确应该是这样,我上面的都不对,测过了
    select id,name from (select id,name,row_number() over(order by id desc) RN from test) where RN < = 10;
      

  10.   

    sorry
    应该是这样:
    select * from (select * from tablename order by id desc) where rownum <= 10
      

  11.   

    select id,name from (select rownum rn,id,name from test order by id desc) where rn <=10;以为这样写是正确的,
    发现得到的结果不正确.大家可以测试下.
    rownum 并没有因为你order by 改变,其实它是个行号,是一个固定的值.可以改写为:select * from (select * from test order by id desc) where rownum <=10; 这样正确
      

  12.   

    你的ID是指的什么ID?rownum还是字段本来就是ID如果是rownum就用
    select * from (select * from tablename order by id desc) where rownum <= 10如果是单独字段就用
    SQL codeselect * from test where rownum <=10 order by id desc 
      

  13.   


    --请LZ参考一下:SQL> select * from tab;A                 B
    -------- ----------
    0121          60.00
    012101        70.00
    0122         110.00
    0124         230.00
    012303        45.00
    0123          80.006 rows selectedSQL>  select t.a,t.b,rownum from (select a,b,rownum rn from tab order by b desc) t where rownum<=3;A                 B     ROWNUM
    -------- ---------- ----------
    0124         230.00          1
    0122         110.00          2
    0123          80.00          3SQL>  select t.a,t.b from (select a,b,rownum rn from tab order by b desc) t where rownum<=5;A                 B
    -------- ----------
    0124         230.00
    0122         110.00
    0123          80.00
    012101        70.00
    0121          60.00SQL> 
      

  14.   

    觉得13楼有理,因为ID如果是指列名,用order by 是不会改变rownum的,因此这个问题的正确答案还要实践一下。
    上次有一道题是这样问的:按ID(字段名)排序并选择出第10-15条之间的记录,我用romnum去排序了,当然结果是不对的。此问题我也很想知道答案
      

  15.   

    支持13楼的说法,rownum是个位列,值是不变的,要选出ID前10的思路应该是先ID排序,再选择排序后的前10行
    select * from (select * from test order by id desc) where rownum <=10,应该是对的。
      

  16.   

    select id,name from (select rownum rn,id,name from test order by id) where rn <=10;  这样是正确的,因为逆序跟选前10条是有先后顺序的
      

  17.   

    不就是 
    select * from test t where rownum<=10 order by id desc;
    这个有问题吗 
      

  18.   

    不可以用limit offset嘛?
    这是MYSQL中的SQL SERVER 
    SELECT TOP 10 * from table order by id desc;MYSQL
    select * from table limit 10 order by id desc;ORACLE
    SELECT * FROM TABLE WHERE ROWNUM<11 ORDER BY ID DESC;
      

  19.   

    没有实践就没有发言权
    我已经试过:
       select * from (select * from table order by id desc) where rownum <=10 ;
      SELECT * FROM TABLE WHERE ROWNUM <11 ORDER BY ID DESC;
      rownum是伪劣,一旦行存在,rownum就固定下来了,SELECT * FROM TABLE WHERE ROWNUM <11 ORDER BY ID DESC是从表头开始选的10行对选出来的10行再排序,这10条并不是整个table值最后10或者最前10
      

  20.   

    一、原始表数据
    select * from s t
             id     name    age    sex
    1 13 sb 20 m
    2 14 44 18 f
    3 15 uu 21 m
    4 16 oo 22 f
    5 01 wang 21 m
    6 02 chen 24 f
    7 03 li 23 f
    8 17 李丁 22 m
    9 05 wang lin 23
    10 06 wu 18  
    11 07 wu1 18
    12 08 张三 22
    13 04 阿四 21 m
    14 10 李红 23 f
    15 11 林林 20
    16 12 吴用 19 m
    排序一下:
    select * from s order by id
        id      name   age     sex
    1 01 wang 21 m
    2 02 chen 24 f
    3 03 li 23 f
    4 04 阿四 21 m
    5 05 wang lin 23 m
    6 06 wu 18  
    7 07 wu1 18
    8 08 张三 22
    9 10 李红 23 f
    10 11 林林 20
    11 12 吴用 19 m
    12 13 sb 20 m
    13 14 44 18 f
    14 15 uu 21 m
    15 16 oo 22 f
    16 17 李丁 22 m
    ******************************************************************
    二、引用17楼的语句查询结果:select * from (select * from s order by id desc) where rownum <=10
            id      name    age    sex
    1 17 李丁 22 m
    2 16 oo 22 f
    3 15 uu 21 m
    4 14 44 18 f
    5 13 sb 20 m
    6 12 吴用 19 m
    7 11 林林 20
    8 10 李红 23 f
    9 08 张三 22
    10 07 wu1 18
    ********************************************************************
    三、引用19楼语句查询结果
    select id,name from (select rownum rn,id,name from s order by id) where rn <=10
            id       name
    1 01 wang
    2 02 chen
    3 03 li
    4 05 wang lin
    5 06 wu
    6 13 sb
    7 14 44
    8 15 uu
    9 16 oo
    10 17 李丁
    ****************************************************************************
    四、我的答案:
    select * from (select id,name,rownum rn from (select  id,name from s order by id)) where rn <=10;
            id      name   rn
    1 01 wang 1
    2 02 chen 2
    3 03 li 3
    4 04 阿四 4
    5 05 wang lin 5
    6 06 wu 6
    7 07 wu1 7
    8 08 张三 8
    9 10 李红 9
    10 11 林林 10
    说明:rowmum是一个虚值,它是对查询结果的一个排序,所以你在什么们置使用它rownum的值都有可能是不一样的。
      

  21.   

    确实是的 谢谢 rownum 在每行数据存在的时候他的值就存在了
      

  22.   

    SELECT * FROM TABLE_NAME WHERE ROWNUM<=10 ORDER BY ID DESC
      

  23.   

    select * from (select * from table order by id desc) where rownum <=10 ;
      

  24.   

    select * from (select * from table order by id desc) where rownum <=10 ;