select max(id),name,max(day1),max(day2),...,max(day31) from 表 group by name

解决方案 »

  1.   


    --更新同一name对应的记录组中,id值最大的那条记录
    update t
    set
        day1 =(select max(day1)  from tabname where name=t.name),
        day2 =(select max(day2)  from tabname where name=t.name),
        ...
        day31=(select max(day31) from tabname where name=t.name)
    from
        tabname t
    where
        not exists(select 1 from tabname where name=t.name and id>t.id)--删除同一name对应的记录组中,id值最大那条记录之外的所有记录
    delete t from tabname t where exists(select 1 from tabname where name=t.name and id>t.id)
      

  2.   

    update '表名' t set
        day1=sum(select max(day1) from '表名' where name=t.name),
        .
        .
        day31=sum(select max(day31) from '表名' where name=t.name)
     where not exists (select * from '表名' where t.name=name and t.id<id)
      

  3.   

    --search
    select max(id) , name , max(day1) , max(day2) ... , max(day31) from tb group by name--update
    update tb 
    set day1 = (select max(day1) from tb where name = t.name),
        day2 = (select max(day2) from tb where name = t.name),
        ...
        day31 = (select max(day31) from tb where name = t.name)
    from tb t--update , delete
    update tb 
    set day1 = (select max(day1) from tb where name = t.name),
        day2 = (select max(day2) from tb where name = t.name),
        ...
        day31 = (select max(day31) from tb where name = t.name)
    from tb t
    delete tb from tb t where id not in (select max(id) from tb where name = t.name)