删除所有不是最新的记录
Delete all records that are not the latest
我有一个 table 故意在其中重复。在这种情况下,将被复制的是 deviceId 和日期时间。有时客户会更新他们的数据。 table 有三列,deviceId,datetime 和 value(有一个增量主键)。有时当客户重新评估他们的数据时,他们发现值不正确,然后他们更新它并发送数据以进行重新处理。因此,我需要能够删除不是最新记录的记录。我不能按日期时间完成,因为在某些情况下这也会被复制,我不能截断暂存 table。
要删除欺骗,我有以下内容:
;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
问题在于,它似乎随机删除了重复项。
我想保留暂存区中的最新记录,并删除所有其他不是最新记录的记录。然后,当我将相关行从暂存到生产中时,我可以使用新值和最新数据更新相关行。
table 上有主键或唯一键吗?
如果有唯一的 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)
我有一个 table 故意在其中重复。在这种情况下,将被复制的是 deviceId 和日期时间。有时客户会更新他们的数据。 table 有三列,deviceId,datetime 和 value(有一个增量主键)。有时当客户重新评估他们的数据时,他们发现值不正确,然后他们更新它并发送数据以进行重新处理。因此,我需要能够删除不是最新记录的记录。我不能按日期时间完成,因为在某些情况下这也会被复制,我不能截断暂存 table。
要删除欺骗,我有以下内容:
;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
问题在于,它似乎随机删除了重复项。
我想保留暂存区中的最新记录,并删除所有其他不是最新记录的记录。然后,当我将相关行从暂存到生产中时,我可以使用新值和最新数据更新相关行。
table 上有主键或唯一键吗? 如果有唯一的 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)