表T有3列:
empid int,
checkdate datetime,
chektime  datetime假设有以下数据:1 2009-06-23 00:00:00.000 1900-01-01 18:01:10.000
1 2009-06-23 00:00:00.000 1900-01-01 18:02:30.000
1 2009-06-23 00:00:00.000 1900-01-01 18:02:50.000
2 2009-06-15 00:00:00.000 1900-01-01 08:42:23.000
2 2009-06-16 00:00:00.000 1900-01-01 08:42:41.000
2 2009-06-17 00:00:00.000 1900-01-01 08:46:03.000
2 2009-06-17 00:00:00.000 1900-01-01 18:20:10.000
2 2009-06-15 00:00:00.000 1900-01-01 18:17:08.000
2 2009-06-16 00:00:00.000 1900-01-01 18:10:00.000
同一天同一小时同一分钟的认为是重复数据,如何用一条语句删掉重复的数据?(重复的数据保留一条,任意一条都行)
删除后的数据应该是这样:
1 2009-06-23 00:00:00.000 1900-01-01 18:01:10.0001 2009-06-23 00:00:00.000 1900-01-01 18:02:50.0002 2009-06-16 00:00:00.000 1900-01-01 08:42:41.000
2 2009-06-17 00:00:00.000 1900-01-01 08:46:03.000
2 2009-06-17 00:00:00.000 1900-01-01 18:20:10.000
2 2009-06-15 00:00:00.000 1900-01-01 18:17:08.000
2 2009-06-16 00:00:00.000 1900-01-01 18:10:00.000

解决方案 »

  1.   

    delete a from T a where chektime 
     not in(select min(chektime) from T 
             where convert(varchar(16),chektime,120)=convert(varchar(16),chektime,120))
      

  2.   

    DELETE A 
    FROM T A 
    WHERE NOT EXISTS(SELECT 1 FROM T B WHERE A.empid=B.empid AND A.chektime>B.chektime)
      

  3.   

    delete from T a
    where exists (select 1 from T where empid=a.empid and checkdate=a.checkdate
    and convert(varchar(16),chektime,120)=convert(varchar(16),a.chektime,120)
    and chektime>a.chektime
    )