22,207
社区成员
发帖
与我相关
我的任务
分享
DELETE 表名 WHERE NO NOT IN ( SELECT MAX(NO) FROM (
SELECT SUBSTRING(TIME,1,LEN(TIME)-3) AS TIME1,* FROM 表名) AS TABLE1 GROUP SID,TIME1,TEXT) --精确到分,还不知道你TIME类型(时间类型为VARCHAR,如果是DATETIME型,截取哪里要转换一下在截取)
create table tb (no int,sid varchar(50),time datetime,text varchar(50))
insert tb select 1 ,'0001','2012-4-10 10:48:03','2#风机工频故障'
insert tb select 2 ,'0001','2012-4-10 10:51:26','1#风机工频故障'
insert tb select 3 ,'0001','2012-4-10 10:52:17','1#风机工频故障'
insert tb select 4 ,'0001','2012-4-10 11:05:14','1#风机工频故障'
insert tb select 5 ,'0001','2012-4-10 11:05:56','1#风机工频故障'
insert tb select 6, '0001','2012-4-10 11:07:04','2#风机工频故障'
with etc as (
select *,sid+'-'+text aa,row_number()over( partition by sid+'-'+text order by sid+'-'+text,time)na from tb )
select * from etc a where exists (select * from etc b where
( b.na>a.na and datediff(ss,a.time,b.time)<60 ) ) or not exists ( select * from etc b where
b.na<a.na and datediff(ss,a.time,b.time)<60 )
order by no
DELETE 表名 WHERE NO NOT IN ( SELECT MAX(NO) FROM 表名 GROUP SID,TIME,TEXT )