Sql 插入或更新其他记录时,如何更新所有记录上的日期字段?
此更新作为存储过程的一部分运行,该存储过程将插入或更新我的信息表中的记录: 但它应该是这样的: InformationID | EffDate | TermDate --------------------------------------------- 1 | 11/02/15 | NULL 2 | 09/01/15 | 09/15/15 3 | 10/03/15 | 11/02/15 4 | 09/15/15 | 10/03/15 用户应按2、4、3、1的顺序输入记录,这将为每个记录分配适当的TermDate。但不幸的是,我们不能强迫他们这么做 问题:如何获取最接近但不小于另一条记录的EffDate的值,并将该值指定为另一条记录的TermDateSql 插入或更新其他记录时,如何更新所有记录上的日期字段?,sql,sql-server,Sql,Sql Server,此更新作为存储过程的一部分运行,该存储过程将插入或更新我的信息表中的记录: 但它应该是这样的: InformationID | EffDate | TermDate --------------------------------------------- 1 | 11/02/15 | NULL 2 | 09/01/15 | 09/15/15 3 |
我删除了InformationID的检查,只是为了确保它们不一样;InformationID@aInformationID,但除此之外,我无法确定如何获取最近的日期。使用窗口函数和可更新的CTE/子查询。作为对您问题的正式回答,这应该是倒数第二条记录:
with toupdate as (
select i.*,
row_number() over (order by effdate desc) as seqnum
from Information
where DeletedBy IS NULL and DeletedOn IS NULL and Code = @aCode
)
update toupdate
set TermDate = @aEffDate
where seqnum = 2;
请编辑您的问题并提供示例数据和所需结果。这没有考虑最接近EffDate的要求,是吗?我重新编辑了我的文章,用了一个更清晰的当前数据样本,以及它应该是什么样的。基本上,如果插入3个日期,最旧的记录应该具有中间记录的日期,而不仅仅是最新记录的日期。 InformationID | EffDate | TermDate --------------------------------------------- 1 | 11/02/15 | NULL 2 | 09/01/15 | 09/15/15 3 | 10/03/15 | 11/02/15 4 | 09/15/15 | 10/03/15
with toupdate as (
select i.*,
row_number() over (order by effdate desc) as seqnum
from Information
where DeletedBy IS NULL and DeletedOn IS NULL and Code = @aCode
)
update toupdate
set TermDate = @aEffDate
where seqnum = 2;