Sql server 基于下一个记录生效日期更新期限日期列

Sql server 基于下一个记录生效日期更新期限日期列,sql-server,Sql Server,你能在这方面帮助我吗?我有如下表格中的数据 输入: 以及所需的输出: IDNO EFFECTIVE DATE TERM DATE ------------------------------------- 100 10/01/2001 03/11/2012 100 03/12/2013 05/02/2013 100 05/03/2013 10/09/2014

你能在这方面帮助我吗?我有如下表格中的数据

输入:

以及所需的输出:

IDNO  EFFECTIVE DATE       TERM DATE
-------------------------------------
100   10/01/2001           03/11/2012           
100   03/12/2013           05/02/2013           
100   05/03/2013           10/09/2014                  
100   10/10/2014           12/31/9999 
200   01/01/2017           02/28/2017
200   03/01/2017           12/31/9999
期限日期应为生效日前一天,最新记录期限日期应始终为1999年12月31日

我可能有N个相同id的记录

在MM/DD/YY中指定了日期值,您可以使用铅:


如果删除where cluase怎么办?更新运行得更快还是更慢?不管怎样,结果都是一样的…@ZoharPeled。我相信SQL Server会更新所有行,即使值不变。这会增加日志记录的额外开销。是的,但行的筛选也需要时间。我看到删除where子句后select语句运行得更快,我想知道更新是否也是这样。
IDNO  EFFECTIVE DATE       TERM DATE
-------------------------------------
100   10/01/2001           03/11/2012           
100   03/12/2013           05/02/2013           
100   05/03/2013           10/09/2014                  
100   10/10/2014           12/31/9999 
200   01/01/2017           02/28/2017
200   03/01/2017           12/31/9999
with toupdate as (
      select t.*,
             lead(effective_date) over (partition by idno order by effective_date) as next_effective_date
      from t
     )
update toupdate
    set term_date = coalesce(dateadd(day, -1, next_effective_date), '9999-12-31')
    where term_date <> coalesce(dateadd(day, -1, next_effective_date), '9999-12-31');