根据Rank1值列数据更新Rank 2值

问题描述

表中的数据如下:

查询: 从#ABC中选择ID,actv_ind,valid_from,valid_to,rnk

enter image description here

预期数据如下: 我想将第2条记录的有效日期自设置为(第1条记录的有效日期自-1)

尝试查询

select t1.id,t1.actv_ind,t1.rnk,case when t1.rnk >1 then t1.valid_from end VF1,case when t2.rnk > 1 then t1.valid_from - 1 end VF2
from #ABC t1
inner join #ABC t2
on t1.id = t2.id
and t1.actv_ind = t2.actv_ind

enter image description here

解决方法

只需使用LAG

SELECT mtrl_id,actv_ind,rnk
       LAG(DATEADD(DAY,-1,valid_from),1,valid_from) OVER (PARTITION BY mtrl_id ORDER BY Rank) AS valid_from,valid_to
FROM dbo.YourTable;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...