select * from 
(select * from fee_record where gtk_phone_num=? orderby charge_date desc) 
where rownum<4

select * from fee_record where gtk_phone_num=? and rownum<4 order by charge_date desc
得到得数据为什么不一样的?
我想要的数据是:
gtk_phone_num的最新三条记录,没有时间限制的。

解决方案 »

  1.   

    第一个是先按照charge_date排序 
    再从排序好的结果集中找前三条记录第二个是 找出前三条记录 然后按照charge_date排序 
      

  2.   

    搞清楚 ORDER BY 和ROWNUM的优先关系就好了ROWNUM要优于ORDER BY,你应该先ORDER BY 然后再取ROWNUN
      

  3.   

    先把需求搞清楚,取出你的结果集最后再取ROWNUN<4
      

  4.   

    因为order by在里和在外的问题,所以你那个rownum取出来是不一样
    必须先排序,然后才能取前三条
      

  5.   

    1 是你先order by charge_date desc  在取前3条
    2 是你先取出3条 在按照这3条orderby  
    这样取肯定是不一样的
      

  6.   

    楼上说的很全了 你把rownum和order by放一块用 结果是先取得rownum的数量 再order by
    由于oracle不支持top N这样的操作 只能先order by一下,再从外层取rownum
    和 sql server里的top是一样的
      

  7.   

    我明白了原来是rownum优先order by,
    select * from  
    (select * from fee_record where gtk_phone_num=? orderby charge_date desc)  
    where rownum<4
    这样的语句不知道还能不能优化,总觉得性能很差的