删除重复的行

时间:2018-10-19 16:20:54

标签: sql sql-server tsql duplicates

临时表中有重复的行,主要是因为有些日期值彼此之间以秒/毫秒为单位。

例如:

  

2018-08-30 12:30:19.000

     

2018-08-30 12:30:20.000

这是导致重复的原因。

如何只保留其中一个值?假设较高者?

谢谢。

2 个答案:

答案 0 :(得分:5)

好吧,一种方法是使用lead()

select t.*
from (select t.*, lead(ts) over (order by ts) as next_ts
      from t
     ) t
where next_ts is null or
      datediff(second, ts, next_ts) < 60;   -- or whatever threshold you want

答案 1 :(得分:1)

您可以为每个值分配一个Row_Number,如下所示:

Select *
, Row_Number() over 
              (partition by ObjectID, cast(date as date)... ---whichever criteria you want to consider duplicates
               order by date desc) --assign the latest date to row 1, may want other order criteria if you might have ties on this field
as RN
from MyTable

然后仅保留RN = 1中要删除重复项的行。有关如何根据需要将日期四舍五入到小时,分钟等的示例,请参见this answer。我以截断为例。