删除时间序列中的重复项

时间:2015-05-31 22:31:06

标签: sql-server duplicates time-series sql-delete

我每隔1毫秒就会在SQL Server 2012表中存储大量测量值。每当在某些行中有3个或更多重复值时,我想删除中间重复项。此样本数据图像中的突出显示值是我要删除的值。有没有办法用SQL查询来做到这一点?

SampleData

3 个答案:

答案 0 :(得分:3)

您可以使用CTEROW_NUMBER

执行此操作

SQL Fiddle

WITH CteGroup AS(
    SELECT *,
        grp = ROW_NUMBER() OVER(ORDER BY MS) - ROW_NUMBER() OVER(PARTITION BY Value ORDER BY MS)
    FROM YourTable
),
CteFinal AS(
    SELECT *,
        RN_FIRST = ROW_NUMBER() OVER(PARTITION BY grp, Value ORDER BY MS),
        RN_LAST  = ROW_NUMBER() OVER(PARTITION BY grp, Value ORDER BY MS DESC)
    FROM CteGroup
)
DELETE 
FROM CteFinal 
WHERE
    RN_FIRST > 1
    AND RN_LAST > 1 

答案 1 :(得分:1)

我确定必须有一种更有效的方法来执行此操作,但您可以将表连接到自身两次以查找列表中的上一个和下一个值,然后删除所有三个条目价值是一样的。

DELETE FROM tbl
WHERE ms IN
(
  SELECT T.ms
  FROM tbl T
  INNER JOIN tbl T1 ON T.ms = T1.ms + 1
  INNER JOIN tbl T2 ON T.ms = T2.ms - 1
  WHERE T.value = T1.value AND T.value = T2.value
)

如果表格真的很大,我可以看到这个吹出的tempdb。

答案 2 :(得分:0)

是的,有

 select * from table group by table.field ->value
相关问题