一个SQL语句问题,关于删除较短时间内重复ID,有答必谢

xiaomuwing 2005-11-14 12:35:35
表结构:
ID DATE
000009CC19AF 20040923093742
000009CC19AF 20040923093753
000009CC2DF8 20040923093857
000009CC2DF8 20040923093858
000009CC2B32 20040923094103
000009CC2B32 20040923094104
000009CCD133 20040923095009
000009CCDE4A 20040923095127
000009CBF877 20040923100934
000009CC03C2 20040923101110
000009CC307F 20040923101314
000009CCD51F 20040923101343
000009CCD51F 20040923101344
000009CCEBC9 20040923102338
000009CCEBC9 20040923102339
000009CCEBC9 20040923102340
000009CCEBC9 20040923102341
000009CCEBC9 20040923102341
000009CCEBC9 20040923102342
000009CCD8DB 20040923102846
000009CCD8DB 20040923102850
000009CCD8DB 20040923102850
…… …… …………

如果ID相同,而且时间上相差在2小时内的记录为垃圾记录,需要删除。

这个语句该怎么写啊??一句话恐怕够戗,用游标很麻烦…………

...全文
181 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomuwing 2005-11-18
  • 打赏
  • 举报
回复
谢谢libin_ftsafe(子陌红尘)!问题解决!:)
xiaomuwing 2005-11-14
  • 打赏
  • 举报
回复
旁边人说在INSERT的时候用TRIGGER,那么这个TRIGGER该怎么写?
xiaomuwing 2005-11-14
  • 打赏
  • 举报
回复
旁边人说在INSERT的时候用TRIGGER,那么这个TRIGGER该怎么写?
子陌红尘 2005-11-14
  • 打赏
  • 举报
回复
ALTER TRIGGER TRG_INT ON [dbo].[data]
INSTEAD OF INSERT
AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM DATA A,INSERTED B WHERE A.NIUHAO = B.NIUHAO AND DATEIDFF(MI,A.SHIJIAN,B.SHIJIAN)<120)
INSERT INTO A SELECT * FROM INSERTED
END
浩方软件HFWMS 2005-11-14
  • 打赏
  • 举报
回复
楼上的可以实现
hackerlyf 2005-11-14
  • 打赏
  • 举报
回复
Create TRIGGER TRG_INT ON [dbo].[data]
For INSERT
AS
BEGIN
Delete d
From data d
Inner Join Inserted i on d.Id = i.Id
where (Convert(Decimal(28,0),i.Date) - Convert(Decimal(28,0),d.Date) < 20000)
END
zzit0721 2005-11-14
  • 打赏
  • 举报
回复
这是解决当插入时候的判断。
如果现在已经有重复情况的话,那得重新写
zhaoanle 2005-11-14
  • 打赏
  • 举报
回复
libin_ftsafe(子陌红尘)
很强!
jianjian51 2005-11-14
  • 打赏
  • 举报
回复
libin_ftsafe(子陌红尘) 靠 经典
xiaomuwing 2005-11-14
  • 打赏
  • 举报
回复
ALTER TRIGGER TRG_INT ON [dbo].[data]
FOR INSERT
AS
DECLARE @SHI BIGINT
DECLARE @BG BIGINT
DECLARE @ED BIGINT
IF EXISTS (SELECT 1 FROM DATA A,INSERTED B WHERE A.NIUHAO = B.NIUHAO)
BEGIN
SET @BG = ( SELECT MIN(A.SHIJIAN) FROM DATA A,INSERTED B WHERE A.NIUHAO = B.NIUHAO)
SET @ED = ( SELECT B.SHIJIAN FROM INSERTED B )
IF ABS(CONVERT(BIGINT,LEFT(@ED,10)) -CONVERT(BIGINT, LEFT(@BG,10))) <2 AND @BG <> @ED
BEGIN
SET @SHI = (SELECT ID FROM INSERTED)
DELETE FROM DATA WHERE ID = @SHI
END
END

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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