我有我的SQL數據庫中包含的數據, 其關於學生和他們用來登錄系統的卡片, 有時學生失去他們的卡,他們得到其中包含有關學生證的信息沒有更新, 其實加入新行一個又一個,但同一行,所以我們得到的情況:多行,具有多個值,如何獲得同一行更高的值ID
有一個學生,2卡,怎麼可能我確定哪一個是較新的,因爲沒有關於'DateCreated'的柱子或者沒有...
我還發現如果我看到更高的CardId fo [R相同的學生, 這意味着「更高」號是目前用戶活躍卡,所以我怎麼能刪除舊標識的..
謝謝你們, 乾杯
我有我的SQL數據庫中包含的數據, 其關於學生和他們用來登錄系統的卡片, 有時學生失去他們的卡,他們得到其中包含有關學生證的信息沒有更新, 其實加入新行一個又一個,但同一行,所以我們得到的情況:多行,具有多個值,如何獲得同一行更高的值ID
有一個學生,2卡,怎麼可能我確定哪一個是較新的,因爲沒有關於'DateCreated'的柱子或者沒有...
我還發現如果我看到更高的CardId fo [R相同的學生, 這意味着「更高」號是目前用戶活躍卡,所以我怎麼能刪除舊標識的..
謝謝你們, 乾杯
一種方法是使用CTE來刪除自聯接,以識別應該刪除的記錄。如果a)對於給定的StudentID
顯示爲一對,並且b)該StudentID
的最小CardID
,則應該刪除記錄。
WITH cte AS (
SELECT StudentID, MIN(CardID) AS CardID
FROM yourTable
GROUP BY StudentID
HAVING COUNT(*) > 1 -- only do a delete if a pair be present
)
DELETE t1
FROM yourTable t1
INNER JOIN cte t2
ON t1.StudentID = t2.StudentID AND
t1.CardID = t2.CardID
你可以試試這個
DELETE a
FROM <your table name> a
WHERE EXISTS
(SELECT 1
FROM <your table name> b
WHERE b.StudentId = a.StudentId
AND b.CardId > a.CardId)
該查詢將刪除其存在具有相同StudentId和CardId中的價值不是刪除記錄的CardId中更大的其他記錄所有學生記錄。
如果您確定較高的卡片ID是有效的卡片ID,那麼您可以在您的表格上實施下面的觸發器,這會在向表格中插入一行時自動刪除舊的記錄。
Create Trigger delete_old_record
On <Your_Table_Name>
After Insert
AS
delete from <Your_Table_Name> where [Student ID]=(select [Student ID] from Inserted)
and [Card_ID]<(select [Card_ID] from Inserted)
Go
您使用的是什麼版本的SQL?這是知道的關鍵。 –
請將樣品數據作爲格式文本發佈,而不是圖片。 (我無法讀取該圖片的小文本。) – jarlh
@TimBiegeleisen它的微軟sql服務器 –