在表中插入记录之前/之后删除旧记录,记录数> 2

Posted

技术标签:

【中文标题】在表中插入记录之前/之后删除旧记录,记录数> 2【英文标题】:Delete the Old record before/after insert the record in a table, iff the record count is > 2 【发布时间】:2016-11-29 03:05:15 【问题描述】:

在将记录插入该表之前/之后删除表中的旧记录,并且仅当记录数大于2时才删除旧记录。

如何实现以下场景:

表名称:示例

Id  Name    Date    Position
1   phani   2013    Trainee
2   phani   2014    Developer

现在我们正在为 phani 再插入一条记录

即 3 phani 2015 sr.Developer

结果

Id  Name    Date    Position
1   phani   2013    Trainee
2   phani   2014    Developer
3   phani   2015    sr.Developer

现在我们必须创建一个触发器,该触发器必须删除旧记录 (意味着必须删除2013年的记录。)

预期输出:

Id  Name    Date    Position
2   phani   2014    Developer
3   phani   2015    sr.Developer

现在假设在 2016 年,职位再次从 sr.developer 更改为项目经理。

那时 2014 年的记录必须删除并插入新记录,如下所示:

Id  Name    Date    Position
3   phani   2015    sr.Developer
4   phani   2016    Project Manager

【问题讨论】:

您使用的是 SQL Server 还是 Postgres?请适当标记您的问题。 【参考方案1】:

听起来您已经知道我们的答案了。创建一个after insert 触发器,用于检查具有给定名称的行数是否大于两个。如果是这样,找到与该名称匹配的最早日期并删除所有具有该日期和名称的行。

【讨论】:

【参考方案2】:

假设您使用 SQL Server 作为数据库服务器。以下查询将产生您所寻找的结果。您只需将此逻辑包装到触发器定义中即可。

DELETE T1 FROM 
TableName T1 
WHERE T1.[Date] = ( SELECT MIN([Date]) 
                    FROM TableName T2 
                    WHERE T1.ID = T2.ID 
                    HAVING COUNT(*) > 2 )   

【讨论】:

以上是关于在表中插入记录之前/之后删除旧记录,记录数> 2的主要内容,如果未能解决你的问题,请参考以下文章

如何用SQL语句删除两个表中相同的记录?

从表中删除旧记录并在日期之前将这些记录备份到新备份表中

自动从 Mysql 表中删除的记录

能用rowid判断表中的记录的插入顺序吗?

使用while循环在表中插入多条记录[关闭]

无法使用oracle中的游标在表中插入记录