我目前有个多表查询的SQL,列较多,有些复杂,现在要筛选查询例:一张表中有如下数据,ID不是唯一的,部分列值相同,每次更新都向表中插入一个新版本,但ID不变,如下表:ID | Name | version001  aaaa     0
001  aaaa     1
001  aaaa     1.1
002  bbbb     0
002  bbbb     1
002  bbbb     2
需要输出结果:
ID | Name | version001  aaaa     1.1
002  bbbb     2

解决方案 »

  1.   

    select id,name,max(version) from t group by id,name
      

  2.   

    select max(version),ID ,Name 
    from t
    group by ID ,Name 
      

  3.   

    select id,name,max(version) from t group by id,name如果你的列真的很多的话有可能处理很多列的数据,每一列的数据你都要处理,除了group by 后面的列
    比如:
     select id,name,max(version),min(其他列),max(其他列) from t group by id,name
      

  4.   

     select *
       from
         (
        select x.*, row_number() over(partition by id, name order by version desc) rn
          from x 
         ) x1
      where rn = 1;
      

  5.   

    參照
    http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html
      

  6.   


    1楼和2楼的不可用,如果这么简单,我就不会上来提问了,输出结果仍然是原结果,如果
    select id,max(version) from t group by id
    的话倒是可以拿到最大值,但却不能拿到其他列的值,如果group多列的值,结果又得不到我要的效果,你们可以试下的,呵呵,谢谢各位!
      

  7.   

    找到答案了,
    select id,name,version from user a 
    where version=(select max(version ) from user where id=a.id)谢谢5楼提供的参考,也谢谢各位的帮忙,呵呵,结贴喽、、、