id name age
1 张三 20
2 张三 21
3 张三 28
4 李四 22   
5 王五 29
6 王五 23查询重复记录中的最大年龄
显示结果
1 张三 28
2 王五 29

解决方案 »

  1.   

    一般ID是不变的:
    select * from tb a where not exists(select 1 from tb where name=a.name and age>a.age)
      

  2.   

    select * from tb a where not exists(select * from tb where name=a.name and age>a.age)
      

  3.   

    select
      id=row_number()over(order by getdate()),name,age
    from
      tb t
    where
      age=(select max(age) from tb where name=t.name)
      

  4.   

    显示只有一条数据的不要.
    fredrickhu大哥错啦
      

  5.   


    select  
      c.id,b.name,b.age
    from 
      (select COUNT(id) id,name name from tb1  group by name having count(id)>1)a 
    join
      (select MAX(age) age,name from tb1 group by name) b 
    on a.name=b.name
    join tb1 c
    on c.name=b.name and c.age=b.age
      

  6.   

    这句绝对可以select ROW_NUMBER()over(order by bb.name) as id,bb.name,max(bb.age) as age
    from
    (
    select * from tt where name in(
    select name from tt
    group by name
    having count(name)>1 )
    ) bb
    group by bb.name