我有我的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服务器 –