在sql server中
select top 1 id from table1 order by price desc
会先将price排逆序 然后取第一个 这根下面这个是一样的
select id from table1 where price=(select max(price) from table1)
在oracle中好像只能用第二种方式来写
select id from table1 where rownum=1 order by price desc
好像是先随机取一条数据 然后把rownum=1 附加在该记录后面 明显不符合要求
如果先排序
select id from (select id from table1 order by price desc ) where rownum=1
我的目的就是先排序 然后再取第一条(这个是否应该也是从括号里面select的结果中随机取一条记录? 并不一定取price最大的那个)如果出现上面这种情况,sql语句一般怎么处理?

解决方案 »

  1.   

    rownum是ORACLE的伪列,若想取最大值,可以使用你的最后一种方法:
    select id from (select id from table1 order by price desc ) where rownum=1
      

  2.   

    楼上的可以,如果想要准确的
    我给你提供一个取任意行的
    SELECT ID FROM(
    select ROWNUM RN,id from (select id from table1 order by price desc ))
    WHERE RN = 1 --(RN BETWEEN 11 AND 20) 这方法可以帮助你分页等类似的功能
      

  3.   

    SELECT ID FROM(
    select ROWNUM RN,id from (select id from table1 order by price desc ))
    WHERE RN = 1 --(RN BETWEEN 11 AND 20) 这方法可以帮助你分页等类似的功能
      

  4.   

    select id from (select id from table1 order by price desc ) where rownum=1
    你这个取到的是你原始表里的第一条,隐藏项rownum的值并没因为你的排序而改变,楼上的那个方法很好.
      

  5.   

    tgm78(shop34161266.taobao.com)你为什么吧我再别地方的话拿过来用?连个招呼也不打