如何将ABC表下行EditedDate填入上行NextDate,末行NextDate设为今日?
解决方案:用窗口函数实现行数据的后续填充
嘿,这个需求用SQL的窗口函数就能完美解决!核心思路是用LEAD()函数获取下一行的EditedDate值,再处理最后一行的特殊情况就行。
具体实现代码(以SQL Server为例)
WITH RowData AS ( SELECT NextDate, -- 获取排序后下一行的EditedDate,没有下一行则返回NULL LEAD(EditedDate) OVER (ORDER BY EditedDate) AS NextRowEditedDate, GETDATE() AS CurrentDateTime FROM ABC ) UPDATE RowData SET NextDate = COALESCE(NextRowEditedDate, CurrentDateTime);
关键细节说明
- 排序规则:
OVER (ORDER BY EditedDate)是核心,它决定了“下一行”的顺序。如果你的表有专属的排序字段(比如自增ID),记得把EditedDate换成对应的字段,确保行的顺序符合你的业务逻辑。 - 最后一行处理:
COALESCE()函数会把LEAD()返回的NULL(也就是最后一行的情况)替换成当前日期。不同数据库的当前日期函数略有差异:- MySQL/MariaDB:用
NOW()或者CURRENT_TIMESTAMP() - PostgreSQL:用
CURRENT_TIMESTAMP - Oracle:用
SYSDATE
- MySQL/MariaDB:用
这样执行后,第一行的NextDate就会自动填充第二行的EditedDate,第二行填第三行的,直到最后一行的NextDate设为当前日期,完全符合你的需求~
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

