Sql server 2012 基于Rank1值列数据更新秩2值

Sql server 2012 基于Rank1值列数据更新秩2值,sql-server-2012,ranking,Sql Server 2012,Ranking,表中的数据如下所示: 查询: 选择id、actv ind、valid from、valid to、rnk from#ABC 预期数据如下: 我希望将秩2记录的有效\u自日期设置为(Rnk 1记录的有效\u自日期-1) 已尝试查询: 选择t1.id,t1.actv_ind,t1.rnk,当t1.rnk>1时选择case,然后从VF1结束选择t1.valid_,当t2.rnk>1时选择case,然后从-1结束选择t1.valid_ 来自#ABC t1 内连接#ABC t2 在t1.id=t2.id

表中的数据如下所示:

查询: 选择id、actv ind、valid from、valid to、rnk from#ABC

预期数据如下: 我希望将秩2记录的有效\u自日期设置为(Rnk 1记录的有效\u自日期-1)

已尝试查询:

选择t1.id,t1.actv_ind,t1.rnk,当t1.rnk>1时选择case,然后从VF1结束选择t1.valid_,当t2.rnk>1时选择case,然后从-1结束选择t1.valid_
来自#ABC t1
内连接#ABC t2
在t1.id=t2.id上
t1.actv_ind=t2.actv_ind

只需使用
LAG

选择mtrl\u id,
工业行动,
rnk
延迟(DATEADD(DAY,-1,valid_from),1,valid_from)超过(按mtrl_id顺序按秩划分)作为valid_from,
有效的
从dbo.YourTable;

谢谢@Larnu。我得到的日期与活动记录的有效日期相同。我需要它到第-1天。简单修复,将第一个引用从
valid\u更改为
DATEADD(第-1天,valid\u from)