id  name addr
1   h     3
2   d     4
3   j     5
3   h     4显示效果
id name addr
1  h    3
2  d    4
3  j    5只要一条SQL能搞定它吗?

解决方案 »

  1.   

    select * from 
    (select row_number() over(partition by id order by addr desc) as num,*
     from tb) a
     where num=1
      

  2.   


    --> 数据库版本:
    --> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
    --> 测试数据:[TB]
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[TB]') 
    AND type in (N'U')) --U 代表你查询的是表
    DROP TABLE [TB]
    GO---->建表
    create table [TB]([id] int,[name] varchar(1),[addr] int)
    insert [TB]
    select 1,'h',3 union all
    select 2,'d',4 union all
    select 3,'j',5 union all
    select 3,'h',4
    GO--> 查询结果
    SELECT * FROM [TB] Y WHERE NOT EXISTS (SELECT 1 FROM TB WHERE [id]=Y.id AND addr>Y.addr)
    --> 删除表格
    --DROP TABLE [TB]
      

  3.   

    SELECT id, [name], addr FROM
    (SELECT number = ROW_NUMBER() OVER(PARTITION BY id ORDER BY GETDATE()), * FROM table_name) a
    WHERE number = 1
      

  4.   

    来个新方法,呵呵
    create table [TB]([id] int,[name] varchar(1),[addr] int)
    insert [TB]
    select 1,'h',3 union all
    select 2,'d',4 union all
    select 3,'j',5 union all
    select 3,'h',4SELECT DISTINCT b.* FROM [TB] a
    CROSS APPLY
    (SELECT TOP(1) * FROM [TB] WHERE id = a.id) b
      

  5.   


    declare @table table (id int,name varchar(1),addr int)
    insert into @table
    select 1,'h',3 union all
    select 2,'d',4 union all
    select 3,'j',5 union all
    select 3,'h',4select id,MAX(name) AS name,MAX(addr) AS addr from @table GROUP BY id
    /*
    id          name addr
    ----------- ---- -----------
    1           h    3
    2           d    4
    3           j    5
    */