临时表中有重复的行,主要是因为有些日期值彼此之间以秒/毫秒为单位。
例如:
2018-08-30 12:30:19.000
2018-08-30 12:30:20.000
这是导致重复的原因。
如何只保留其中一个值?假设较高者?
谢谢。
答案 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。我以截断为例。