表tt,有id,a,b   3列 
a b id
1 1 1
1 2 2
2 1 3
2 2 4
3 1 5
4 1 6求如下结果集 
a     b   id
1     2    2
2     2    4
3     1    5
4     1    6用一条select语句实现,我不想使用存储过程和临时表,这样可以吗?求大家帮忙看看!

解决方案 »

  1.   

    Cannot understand, like this?  SELECT A,MAX(B),MAX(ID) FROM TABLE 
      GROUP BY A;
      

  2.   

    SQL> WITH A AS (SELECT 1 A,1 B,1 ID FROM DUAL
      2             UNION
      3             SELECT 1 A,2 B,2 ID FROM DUAL
      4             UNION
      5             SELECT 2 A,1 B,3 ID FROM DUAL
      6             UNION
      7             SELECT 2 A,2 B,4 ID FROM DUAL
      8             UNION
      9             SELECT 3 A,1 B,5 ID FROM DUAL
     10             UNION
     11             SELECT 4 A,1 B,6 ID FROM DUAL
     12             )
     13  select A,B,ID FROM (SELECT A,B,ID,ROW_NUMBER()OVER(PARTITION BY A ORDER BY B DESC) RN FROM A) A
     14  WHERE RN=1
     15  /
     
             A          B         ID
    ---------- ---------- ----------
             1          2          2
             2          2          4
             3          1          5
             4          1          6
      

  3.   

    但是如果是这样
    a   b   id 
    1   1   2 
    1   2   1 
    2   1   3 
    2   2   4 
    3   1   5 
    4   1   6 
    则回得到
    a           b       id 
    1           2         2 
    2           2         4 
    3           1         5 
    4           1         6
    就不是这行记录了