删除其中部分原始重复的记录 [英] Delete record where duplicate in part of raw

查看:92
本文介绍了删除其中部分原始重复的记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要删除表中的所有记录,该表之间的时间为1或2分钟或相同,并且必须相同。 ID 但保留第一条记录

I need to delete all records in a table where the time between it 1 or 2 minute or the same and must be the same ID but keep the first record

ID             Time             SN  SD   WE FW
10  2014-06-30 19:17:37.000 I   0   100 0
10  2014-06-30 19:17:42.000 I   0   100 0
10  2014-06-30 19:17:46.000 I   0   100 0
10  2014-06-30 19:17:58.000 I   0   100 0
10  2014-06-30 20:37:46.000 I   0   100 0

or

ID             Time             SN  SD   WE FW
10  2014-07-01 21:10:33.000 I   0   100 0
10  2014-07-01 21:11:06.000 O   0   100 0
10  2014-07-02 20:53:36.000 I   0   100 0
10  2014-07-02 20:53:38.000 I   0   100 0
10  2014-07-02 20:54:33.000 O   0   100 0
10  2014-07-02 20:54:41.000 O   0   100 0
10  2014-07-02 20:55:22.000 o   0   100 0

成为

ID             Time             SN  SD   WE FW
10  2014-06-30 19:17:37.000 I   0   100 0
10  2014-06-30 20:37:46.000 I   0   100 0

ID             Time             SN  SD   WE FW
10  2014-07-01 21:10:33.000 I   0   100 0
10  2014-07-02 20:53:36.000 I   0   100 0






无法正常工作
对不起,我是新用户@sql此MY Table内容


ITS NOT Working sorry i am new @sql This MY Table content

SELECT TOP 1000 
      [USERID]
      ,[CHECKTIME]
      ,[CHECKTYPE]
      ,[VERIFYCODE]
      ,[SENSORID]
      ,[WorkCode]
      ,[sn]
FROM 
   [NEWFP].[dbo].[CHECKINOUT]

,我需要删除2或1分钟的记录并保留

and I need to delete record that the time 2 or 1 minute and keep the first but the same user id.

我做不到吗?

推荐答案

去这里!

DECLARE @Seconds INT = 120
DECLARE @Logs TABLE (
    ID INT,
    [Time] DATETIME
)
INSERT @Logs VALUES
(10, '2014-06-30 19:17:37.000'),
(10, '2014-06-30 19:17:42.000'),
(10, '2014-06-30 19:17:46.000'),
(10, '2014-06-30 19:17:58.000'),
(10, '2014-06-30 20:37:46.000'),
(10, '2014-07-01 21:10:33.000'),
(10, '2014-07-01 21:11:06.000'),
(10, '2014-07-02 20:53:36.000'),
(10, '2014-07-02 20:53:38.000'),
(10, '2014-07-02 20:54:33.000'),
(10, '2014-07-02 20:54:41.000'),
(10, '2014-07-02 20:55:22.000')

;WITH Logs AS (
    SELECT
        ID,
        [Time],
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY [Time]) AS RowNum
    FROM @Logs L
)
    --SELECT *, DATEDIFF(SS, L1.[Time], L2.[Time])
    DELETE L2
    FROM Logs L1
        INNER JOIN Logs L2
            ON L1.ID = L2.ID
                AND L1.RowNum = L2.RowNum - 1
    WHERE DATEDIFF(SS, L1.[Time], L2.[Time]) < @Seconds
SELECT * FROM @Logs

这篇关于删除其中部分原始重复的记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆