使用SQL将符合条件的下一行列值插入至当前行对应列
解决方案:更新NextDate列的SQL实现
嗨,针对你这个更新NextDate列的需求,我整理了适配不同主流数据库的SQL方案,你可以根据自己使用的数据库来选择:
核心规则回顾
- 对于ID=502的行,当
status为Passive时,将该行的EditedDate值赋值给NextDate字段 - 对于ID=1702的所有行,找到最后一行(默认按
EditedDate降序取最新记录,若有自增主键可替换排序字段),当该行status为Passive时,将自身的EditedDate赋值给NextDate
SQL Server 实现代码
-- 处理ID=502的Passive行 UPDATE YourTableName SET NextDate = EditedDate WHERE ID = 502 AND status = 'Passive'; -- 处理ID=1702的最后一条Passive行 UPDATE t1 SET NextDate = t1.EditedDate FROM YourTableName t1 INNER JOIN ( SELECT TOP 1 ID, EditedDate FROM YourTableName WHERE ID = 1702 AND status = 'Passive' ORDER BY EditedDate DESC -- 若有自增主键,可替换为 ORDER BY 自增列 DESC ) t2 ON t1.ID = t2.ID AND t1.EditedDate = t2.EditedDate;
MySQL 实现代码
-- 处理ID=502的Passive行 UPDATE YourTableName SET NextDate = EditedDate WHERE ID = 502 AND status = 'Passive'; -- 处理ID=1702的最后一条Passive行 UPDATE YourTableName t1 JOIN ( SELECT ID, EditedDate FROM YourTableName WHERE ID = 1702 AND status = 'Passive' ORDER BY EditedDate DESC -- 若有自增主键,可替换为 ORDER BY 自增列 DESC LIMIT 1 ) t2 ON t1.ID = t2.ID AND t1.EditedDate = t2.EditedDate SET t1.NextDate = t1.EditedDate;
数据示例说明
原始数据状态:
- ID=502的行:status=Passive,EditedDate=2017-07-31 14:17:14.000,NextDate为空
- ID=1702的多行数据中,最后一行:status=Passive,EditedDate=2017-08-01 17:30:55.000,NextDate为空
目标输出状态:
- ID=502的行NextDate更新为2017-07-31 14:17:14.000
- ID=1702的最后一行NextDate更新为2017-08-01 17:30:55.000
- 其余行的NextDate保持原有值不变
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

