居然把yyyy--mm定义为floatl类型??
select * from 
(select t.*,row_number() over(order by yyyy desc,mmdesc) seq from table)r
where r.seq = 1

解决方案 »

  1.   

    select * from table order by yyyy desc,mm desc and rownum=1
      

  2.   

    楼上的是不可以的,因为rownum是不会变的,他永远是表里面第一条纪录的rownum,如果排序以后这条记录派到后面去了,它的rownum仍然为1
      

  3.   

    select * from(select * from table_name order by yyyy desc,mm desc) where rownum=1;
      

  4.   

    楼上说的对 rownum的次序不会因为 order by 而发生改变
      

  5.   

    请这样试试
      select * from table a where a.yyyy=(select max(yyyy) from table b) and a.mm=(select max(mm) from table c)
      

  6.   

    回复人: asgc_dgh(sanhao) 
    请这样试试
      select * from table a where a.yyyy=(select max(yyyy) from table b) and a.mm=(select max(mm) from table c)应该是这样的吧
      select * from table a where a.yyyy=(select max(yyyy) from table b) and a.mm=(select max(mm) from table c where c.yyyy=a.yyyy)
    需要有(yyyy,mm)双列索引
    不过最关键的问题是搂主的表结构太不专业了
      

  7.   

    select * from t where (yyyy*100+mm)=(select max(yyyy*100+mm) from t)
      

  8.   

    pl_sql 6.0 的菜单项File -> new -> Explain Plan Window 可以把语句考进去,它会帮你分析执行情况,尽量避免全表扫描,具体怎么用,我不是十分了解。