[table] 是我每分鐘決議一次的表,我正在使用“進行中”更新最舊的記錄。完成處理后,我洗掉“進行中”記錄并重新開始。我罕見的問題是,當我有相同的記錄嘗試在同一個 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
注意唯一ID在原始資料庫中是唯一的,在我的表中不是唯一的,我的表沒有索引,沒有約束或任何東西,因為它幾乎一直是空的,除非我們將資料轉儲到其中
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
一種方法是按 ImportDate 對所有 [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'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466140.html
上一篇:只有兩個物件 其余計數
下一篇:如何從SQL資料庫查詢中過濾掉值
