Sql 多行,具有多个值,如何为同一行ID获取更高的值
我的SQL数据库中包含数据, 这是关于学生和他们用来登录系统的卡片, 有时学生会丢失他们的卡,然后他们会得到另一张卡,但包含学生卡信息的同一行没有更新, 事实上,添加了新行,因此我们得到了以下情况: 有一个学生有两张卡片,我怎么能确定哪张是新的,因为没有关于“DateCreated”或smth的栏 我还发现如果我看到同一个学生的卡迪更高, 这意味着“更高”的号码是用户当前的活动卡,所以我如何删除旧Id 照片如下: 谢谢各位,Sql 多行,具有多个值,如何为同一行ID获取更高的值,sql,sql-server,select,numbers,Sql,Sql Server,Select,Numbers,我的SQL数据库中包含数据, 这是关于学生和他们用来登录系统的卡片, 有时学生会丢失他们的卡,然后他们会得到另一张卡,但包含学生卡信息的同一行没有更新, 事实上,添加了新行,因此我们得到了以下情况: 有一个学生有两张卡片,我怎么能确定哪张是新的,因为没有关于“DateCreated”或smth的栏 我还发现如果我看到同一个学生的卡迪更高, 这意味着“更高”的号码是用户当前的活动卡,所以我如何删除旧Id 照片如下: 谢谢各位, Cheers一种方法是执行删除自连接,使用CTE识别应该删除的记录。
Cheers一种方法是执行删除自连接,使用CTE识别应该删除的记录。如果记录A显示为给定StudentID的一对,而b是该StudentID的最小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是有效的,则您可以在表上执行以下触发器,当您在表中插入行时,该触发器将自动删除旧记录桌子
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?了解这一点至关重要。请将样本数据以格式化文本而不是图片的形式发布。我看不懂那张图片的小文本。@TimBiegeleisen它的microsoft sql Server是的,你已经说过了,我在下面给了你一个查询。这对所有数据库都有效吗?我们不知道正在使用的数据库。可能是可移植的核心ANSI SQL。@Tim Biegeleisen其Microsoft SQLServer@TrungDuong你能更详细地解释一下吗?我已经编辑了我的答案。如果你还不清楚,请告诉我。
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