Jim*_*Jim 8 sql sql-server sql-server-2008-r2
我需要清理一个有三列的表,ID(uniqueidentifier),Observation(nvarchar)和Timestamp(datetimeoffset).内容由两个传感器以1小时间隔生成,并且观察值与两个传感器相同.我的想法是做一个SELECT查询,如
SELECT * FROM [Records] ORDER BY [Timestamp]
Run Code Online (Sandbox Code Playgroud)
然后删除每个备用行.
我在SO上发现了如何删除访问表中的每个备用行,但这里并不真正适用,因为ID不是Int而是UID.
数据样本如下所示:

Mik*_*son 16
如果您使用的是SQL Server 2005或更高版本,则可以执行以下操作.
delete T
from (
select row_number() over(order by [Timestamp]) as rn
from YourTable
where SomeColumn = @SomeValue
) T
where T.rn % 2 = 0
Run Code Online (Sandbox Code Playgroud)
您可以使用更安全的变体,而不是删除备用记录 - 仅删除重复的观察结果,这样在数据出现错误的情况下,您就不会失去同步:
; with cte as (
select *,
row_number() over (partition by Observation
order by [Timestamp]) rn
from [Records]
)
delete cte
where rn > 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9252 次 |
| 最近记录: |