A表:日期           号码1         号码2        序号   
20060101     A1            B1          3
20060101     A1            B1          4
20060101     A1            B1          220060105     C1            D1          2
20070101     A1            B1          1  B表:   日期           号码1         号码2        序号
20060101     A1            B1          4
20060105     C1            D1          2
20070101     A1            B1          1
要求得到B表的结果
说明:日期+号码1+号码2唯一  
对日期+号码1+号码2重复的,要序号大的记录,对日期+号码1+号码2不重复的,全要
         

解决方案 »

  1.   

    SELECT
        日期,号码1,号码2,
        MAX(序号) AS 序号
    FROM tb
    GROUP BY 日期,号码1,号码2
      

  2.   

    select 日期 ,
           号码1,
           号码2,
           max(序号) 序号
    from a
    group by 日期 , 号码1 , 号码2
      

  3.   

    select 日期,号码1 , 号码2,max(序号) 序号 from A表 group by 日期,号码1 , 号码2 order by 日期,号码1 , 号码2
      

  4.   

    create table a(日期 varchar(10), 号码1 varchar(10), 号码2 varchar(10), 序号 int)
    insert into a values('20060101' , 'A1' , 'B1' , 3 )
    insert into a values('20060101' , 'A1' , 'B1' , 4 )
    insert into a values('20060101' , 'A1' , 'B1' , 2 )
    insert into a values('20060105' , 'C1' , 'D1' , 2 )
    insert into a values('20070101' , 'A1' , 'B1' , 1 )
    goselect 日期 ,
           号码1,
           号码2,
           max(序号) 序号
    from a
    group by 日期 , 号码1 , 号码2drop table a/*日期         号码1        号码2        序号          
    ---------- ---------- ---------- ----------- 
    20060101   A1         B1         4
    20060105   C1         D1         2
    20070101   A1         B1         1(所影响的行数为 3 行)
    */
      

  5.   

    select 
      *
    from A t
    where not exists(select * from 日期=t.日期 and 号码1=t.号码1 and 号码2=t.号码2 and 序号>t.序号)
      

  6.   


    declare @A table (日期 nvarchar(10),号码1 nvarchar(10),号码2 nvarchar(10),序号 int)
    insert into @A select '20060101','A1','B1',3
        union all  select '20060101','A1','B1',4
        union all  select '20060101','A1','B1',2
        union all  select '20060105','C1','D1',2
        union all  select '20070101','A1','B1',1
    select * from @A a where 序号= (select MAX(序号) from @A where a.日期=日期 and a.号码1=号码1 and 号码2=a.号码2) 
        order by 序号 desc日期         号码1        号码2        序号
    ---------- ---------- ---------- -----------
    20060101   A1         B1         4
    20060105   C1         D1         2
    20070101   A1         B1         1(3 行受影响)日期         号码1        号码2        序号
    ---------- ---------- ---------- -----------
    20060101   A1         B1         4
    20060105   C1         D1         2
    20070101   A1         B1         1(3 行受影响)