select * 
from tablename a
where f2=
(select max(f2) from tablename b
where b.f1=a.f1)

解决方案 »

  1.   

    select a.* 
    from tablename a,(select f1,max(f2) f2 from tablename group by f1) b
    where a.f1=b.f1 and a.f2=b.f2;
      

  2.   

    select * 
    from table 
    where (f1,f2) in (select f1,max(f2) from table group by f1)
      

  3.   

    sbaz和czbbbs差不多,只是一个是等于一个是in,现在还有一个问题,如果f2最大的有2个,而我只想返回这当中的任意一条,该怎么写?还有,请回答一下为什么select里的字段出现在group by 里才行,是所有数据库都这样要求的吗?谢谢
      

  4.   

    我不知道czbbbs() 在语法上能不能通过,有点怀疑!
    select里的字段出现在group by 里才行是所有数据库都是这样的。如果只想返回1条,用分析函数是最好的了。其它都会很麻烦。
      

  5.   

    SELECT
         a.f_1,
         a.f_2,
         a.f_3
    FROM t_Test a
    JOIN 
    (
        SELECT f_1,max(f_2),Max(ROWID) AS f_ID 
        FROM T_Test 
        GROUP BY f_1
    )b ON a.ROWID = b.f_ID
      

  6.   

    只能这样啦!一般有个唯一ID就容易多啦!不然就用系统的RowID!
    这样保证重复的记录就选其中一个!
      

  7.   

    最好不用oracle特有的rownum之类的东西,而用标准的sql。为什么要这么做呢..其实我们切换数据库的机会一般都不会很大..
      

  8.   

    sbaz(万神渡劫) ( ) 信誉:100  2006-06-27 12:02:00  得分: 0  
     
     
       select a.* 
    from tablename a,(select f1,max(f2) f2 from tablename group by f1) b
    where a.f1=b.f1 and a.f2=b.f2;
      
     
    他的方法可取