SQL 更改更新以跳过重复项
SQL Change an UPDATE to skip duplicates
[table] 是一个 table,我每分钟解析一次,我正在用 'in progress' 更新最旧的记录。完成处理后,我会删除 'in progress' 条记录并重新开始。我的 rare 问题是当我有相同的记录试图在同一个 50 批次中导入两次时。我想改变这个。
我有 [table]
的更新
;WITH cte AS (
SELECT TOP 50 [Status]
FROM [table]
ORDER BY [ImportDate] ASC)
UPDATE cte SET [Status] = 'IN PROGRESS';
我想以一种方式更改它,如果 [table] 中有 2 条(或更多)记录具有相同的唯一 ID,则只获取最旧的一条记录,所有记录时间,所以它就像一个 update distinct uniquecolumn order by importdate
注意unique id在原始数据库中是唯一的,在我的table中不是唯一的,我的table没有索引,没有约束或任何东西,因为它几乎一直是空的,除非我们将数据转储到其中
我该怎么做?
一种方法是按导入日期对所有 [status] 值进行排序,并使用 ROW_NUMBER() 对最旧的日期进行排序。
;WITH cte AS (
SELECT TOP 50 * FROM
(
SELECT [Status], ImportDate,
RN= ROW_NUMBER() OVER(PARTITION BY Status ORDER BY ImportDate)
FROM [table]
)AS X
WHERE RN=1
ORDER BY ImportDate
)
UPDATE cte SET [Status] = 'IN PROGRESS'
[table] 是一个 table,我每分钟解析一次,我正在用 'in progress' 更新最旧的记录。完成处理后,我会删除 'in progress' 条记录并重新开始。我的 rare 问题是当我有相同的记录试图在同一个 50 批次中导入两次时。我想改变这个。
我有 [table]
的更新;WITH cte AS (
SELECT TOP 50 [Status]
FROM [table]
ORDER BY [ImportDate] ASC)
UPDATE cte SET [Status] = 'IN PROGRESS';
我想以一种方式更改它,如果 [table] 中有 2 条(或更多)记录具有相同的唯一 ID,则只获取最旧的一条记录,所有记录时间,所以它就像一个 update distinct uniquecolumn order by importdate
注意unique id在原始数据库中是唯一的,在我的table中不是唯一的,我的table没有索引,没有约束或任何东西,因为它几乎一直是空的,除非我们将数据转储到其中
我该怎么做?
一种方法是按导入日期对所有 [status] 值进行排序,并使用 ROW_NUMBER() 对最旧的日期进行排序。
;WITH cte AS (
SELECT TOP 50 * FROM
(
SELECT [Status], ImportDate,
RN= ROW_NUMBER() OVER(PARTITION BY Status ORDER BY ImportDate)
FROM [table]
)AS X
WHERE RN=1
ORDER BY ImportDate
)
UPDATE cte SET [Status] = 'IN PROGRESS'