删除时间范围内,重复的数据

bibite51520 2012-04-10 01:15:52
NO SID Time text
1 0001 2012-4-10 10:48:03 2#风机工频故障
2 0001 2012-4-10 10:51:26 1#风机工频故障
3 0001 2012-4-10 10:52:17 1#风机工频故障
4 0001 2012-4-10 11:05:14 1#风机工频故障
5 0001 2012-4-10 11:05:56 1#风机工频故障
6 0001 2012-4-10 11:07:04 2#风机工频故障
7 0001 2012-4-10 11:07:46 2#风机工频故障
8 0001 2012-4-10 11:08:54 软起故障
9 0001 2012-4-10 11:10:10 方管输送机故障
10 0001 2012-4-10 11:11:26 除尘卸料故障
11 0001 2012-4-10 11:12:08 除尘卸料故障
12 0001 2012-4-10 11:13:16 输送卸料故障
13 0001 2012-4-10 11:13:58 输送卸料故障
14 0001 2012-4-10 11:19:45 1#风机工频故障
15 0001 2012-4-10 11:20:27 1#风机工频故障
16 0001 2012-4-10 12:52:57 软起故障



当SID和Text相同时,Time在1分钟内只保留1条数据,结果如下
NO SID Time text
1 0001 2012-4-10 10:48:03 2#风机工频故障
2 0001 2012-4-10 10:51:26 1#风机工频故障
4 0001 2012-4-10 11:05:14 1#风机工频故障
6 0001 2012-4-10 11:07:04 2#风机工频故障
8 0001 2012-4-10 11:08:54 软起故障
9 0001 2012-4-10 11:10:10 方管输送机故障
10 0001 2012-4-10 11:11:26 除尘卸料故障
12 0001 2012-4-10 11:13:16 输送卸料故障
14 0001 2012-4-10 11:19:45 1#风机工频故障
16 0001 2012-4-10 12:52:57 软起故障
...全文
205 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq381289113 2012-04-11
  • 打赏
  • 举报
回复
小倪的代码很大的问题,group 不能用作子语句的
Me_zzx 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

DELETE 表名 WHERE NO NOT IN ( SELECT MAX(NO) FROM 表名 GROUP SID,TIME,TEXT ) --这个精确到秒了

[/Quote]

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型,截取哪里要转换一下在截取)
学习中------- 2012-04-10
  • 打赏
  • 举报
回复

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
Me_zzx 2012-04-10
  • 打赏
  • 举报
回复

DELETE 表名 WHERE NO NOT IN ( SELECT MAX(NO) FROM 表名 GROUP SID,TIME,TEXT )

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧