请求协助编写T-SQL语句删除指定样本数据中的记录
T-SQL 删除指定记录解决方案
针对你给出的样本数据1的需求,我来一步步拆解实现方案:
需求理解
对于同一member_id + problem_id的记录组,需要删除状态为Error的记录,以及该组中所有version_id小于等于该Error记录版本号的记录(对应例子中删除version_id 1、2、3、4,保留version_id 5)。
步骤1:先验证要删除的记录
在执行删除前,建议先通过SELECT语句确认目标记录,避免误删:
WITH ErrorVersionInfo AS ( -- 找出每个组中状态为Error的最大version_id(如果同一组有多个Error,取最新的那个版本作为删除截止点) SELECT member_id, problem_id, MAX(version_id) AS cutoff_version FROM your_table WHERE Status = 'Error' GROUP BY member_id, problem_id ) SELECT t.* FROM your_table t JOIN ErrorVersionInfo evi ON t.member_id = evi.member_id AND t.problem_id = evi.problem_id WHERE t.version_id <= evi.cutoff_version;
把your_table替换成你的实际表名,执行后应该能看到要删除的4条记录(version_id 1-4)。
步骤2:执行删除操作
确认无误后,运行以下DELETE语句:
WITH ErrorVersionInfo AS ( SELECT member_id, problem_id, MAX(version_id) AS cutoff_version FROM your_table WHERE Status = 'Error' GROUP BY member_id, problem_id ) DELETE t FROM your_table t JOIN ErrorVersionInfo evi ON t.member_id = evi.member_id AND t.problem_id = evi.problem_id WHERE t.version_id <= evi.cutoff_version;
关于样本数据2
你提到样本数据2有其他规则,但内容没写完。如果是类似的分组删除需求(比如删除Error之后的记录、保留特定状态的记录等),可以把具体规则补充清楚,我再帮你调整对应的T-SQL语句。
内容的提问来源于stack exchange,提问作者user9760165
相关产品推荐
相关产品推荐

