我有一张故意重复的表。在这种情况下,将要复制的东西是deviceId和datetime。有时客户会更新他们的数据。该表有三列,deviceId,datetime和value(有一个增量主键)。有时,当客户重新评估他们的数据时,他们会注意到该值不正确,然后他们更新它并发送数据以进行重新处理。因此,我需要能够删除不是最新记录的记录。我不能在datetime之前做,因为在某些情况下这也会重复,我无法截断登台表。
要删除欺骗,我有以下内容:
;WITH DupeData AS (
SELECT ROW_NUMBER() OVER(PARTITION BY tblMeterData_Id,fldDateTime, fldValue, [fldBatchId],[fldProcessed] ORDER BY fldDateTime) AS ROW
FROM [Stage.tblMeterData])
DELETE FROM DupeData
WHERE ROW > 1
这个问题,似乎是删除随机副本。
我想保留暂存区域中的最新记录,并删除不是最新记录的任何其他记录。然后,我可以使用最新数据更新相关行,当我将其从分段转换为prod时。
答案 0 :(得分:0)
是桌面上的任何主键还是唯一键? 如果有唯一的ID - 下面最简单的方法 不确定性能,但应该少量工作
DELETE FROM DupeData
where id in
(select id from
( SELECT id,
ROW_NUMBER() OVER(PARTITION BY tblMeterData_Id,fldDateTime, fldValue, [fldBatchId],[fldProcessed] ORDER BY fldDateTime) AS ROW
FROM [Stage.tblMeterData])
) q
where q.row > 1)