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'