SELECT NAME,MAX(STARTDATE) AS STARTDATE,ENDDATE FROM A
GROUP BY NAME,ENDDATE

解决方案 »

  1.   

    create table tb
    (name  varchar(10),
     startdate  datetime,
     enddate datetime)insert into tb
    select 'name1' ,       '2004-09-23' ,     '2004-09-30' union all   
    select 'name1' ,       '2004-09-25' ,     '2004-09-30' union all
    select 'name2' ,       '2004-09-26' ,     '2005-01-03' union all
    select 'name1' ,       '2004-09-26' ,     '2004-09-30'
    delete from tb where name+convert(char(10),startdate,120)+convert(char(10),enddate,120)  in 
    (select name+convert(char(10),startdate,120)+convert(char(10),enddate,120) from tb a
    where  exists 
    (select 1 from tb where name=a.name 
     and enddate=a.enddate and startdate>a.startdate)
    )select * from tbname    startdate  enddate
    ----    ---------- ----------
    name2 2004-09-26 2005-01-03 
    name1 2004-09-26 2004-09-30 
    (所影响的行数为 2 行)
      

  2.   

    再提供一个例子(我用的是一、b)删除重复数据  
     
    一、具有主键的情况  
    a.具有唯一性的字段id(为唯一主键)  
    delect  table    
    where  id  not  in    
    (  
    select  max(id)  from  table  group  by  col1,col2,col3...  
    )  
    group  by  子句后跟的字段就是你用来判断重复的条件,如只有col1,  
    那么只要col1字段内容相同即表示记录相同。  
     
    b.具有联合主键  
    假设col1+','+col2+','...col5  为联合主键  
    select  *  from    table  where  col1+','+col2+','...col5  in  (  
       select  max(col1+','+col2+','...col5)  from  table    
    where  having  count(*)>1  
    group  by  col1,col2,col3,col4    
    )  
    group  by  子句后跟的字段就是你用来判断重复的条件,  
    如只有col1,那么只要col1字段内容相同即表示记录相同。  
     
     
    or  
    select  *  from  table    where  exists  (select  1  from  table  x  where  table.col1  =  x.col1  and    
    table.col2=  x.col2  group  by  x.col1,x.col2  having  count(*)  >1)  
     
    c:判断所有的字段  
       select  *  into  #aa  from  table  group  by  id1,id2,....  
       delete  table    
       insert  into  table    
       select  *  from  #aa  
     
    二、没有主键的情况  
     
    a:用临时表实现  
    select  identity(int,1,1)  as  id,*  into  #temp  from  ta  
    delect  #temp    
    where  id  not  in    
    (  
       select  max(id)  from  #  group  by  col1,col2,col3...  
    )  
    delete  table  ta  
    inset  into  ta(...)  
         select  .....  from  #temp  
     
    b:用改变表结构(加一个唯一字段)来实现  
    alter  table  表  add    newfield  int  identity(1,1)  
    delete  表  
    where  newfield  not  in  
    (  
    select  min(newfield)  from  表  group  by  除newfield外的所有字段  
    )  
     
    alter  table  表  drop  column  newfield  
      

  3.   

    DELETE FROM tablename WHERE (id NOT IN (SELECT max(a.id) FROM nnn a ,nnn b where a.name = b.name AND a.endtime = b.endtime AND a.starttime > b.starttime group by a.name))
      

  4.   

    DELETE FROM tablename WHERE (id NOT IN (SELECT max(a.id) FROM tablename a ,tablename b where a.name = b.name AND a.endtime = b.endtime AND a.starttime > b.starttime group by a.name))