SQL Server:按组组合值

SQL Server:按组组合值,sql,sql-server,Sql,Sql Server,我有以下数据。我需要在status by ID上添加一个带有最终日期的列。因此,第一行的最终日期将是第二行的日期 原始数据: ID | STATUS | DATE -----+---------+----------- 1 | A | 2020-01-03 1 | B | 2020-01-07 1 | C | 2020-01-14 2 | A | 2020-01-04 预期结果: ID | STATUS |

我有以下数据。我需要在status by ID上添加一个带有最终日期的列。因此,第一行的最终日期将是第二行的日期

原始数据:

ID   | STATUS  |  DATE
-----+---------+-----------
1    | A       | 2020-01-03
1    | B       | 2020-01-07
1    | C       | 2020-01-14
2    | A       | 2020-01-04
预期结果:

ID   | STATUS  | DATE       | FINAL_DATE
-----+---------+------------+------------
1    | A       | 2020-01-03 | 2020-01-07
1    | B       | 2020-01-07 | 2020-01-14
1    | C       | 2020-01-14 |
2    | A       | 2020-01-04 |
如何在SQLServer中实现它?有什么想法吗?

使用窗口功能:

select *,
  lead(date) over(partition by id order by date) FINAL_DATE
from tablename
请参阅。
结果:


如果需要向表中添加列,请执行以下操作:

alter table original add column final_date date;

update o
    set final_date = new_final_date
    from (select o.*,
                 lead(date) over (partition by id order by date) as new_final_date
          from original o
         ) o;

您想在表中添加一个新列,还是只需要一个select查询?
alter table original add column final_date date;

update o
    set final_date = new_final_date
    from (select o.*,
                 lead(date) over (partition by id order by date) as new_final_date
          from original o
         ) o;