2

我正在创建一个显示旧地址的列。每当更新地址时,旧地址将在新地址生效的前一天过期,并且将使用新地址添加具有相同帐号的新行(例如:旧地址将显示:From:10/01 /2020 至:12/31/2021 和新地址从:01/01/2022 至:12-31-9999)。我试图在 SQL 中并排显示每个帐号的旧地址和新地址,但我得到了零。

样本数据

帐号 地址 有效自 有效
4895626 720主 2020 年 10 月 1 日 2021 年 12 月 31 日
9794651 158 第四街 2002 年 9 月 29 日 2020 年 12 月 19 日
4895626 第九大道 5986 号 2022 年 1 月 1 日 9999 年 12 月 31 日

期望的结果

帐号 地址 有效自 有效 以前的地址
4895626 720主 2020 年 10 月 1 日 2021 年 12 月 31 日 0
9794651 158 第四街 2002 年 9 月 29 日 2020 年 12 月 19 日 0
4895626 第九大道 5986 号 2022 年 1 月 1 日 9999 年 12 月 31 日 720主
DECLARE @PreviousValidTo DATE;
SELECT @PreviousValidTo = DATEADD(DAY, -1, Z.ValidFrom)
FROM Address.NewAddress Z
SELECT Address, ValidFrom, ValidTo
CASE
            WHEN @PreviousValidTo = C.ValidFrom
            THEN C.Address
            ELSE 0
            END AS PreviousAddress
FROM Address.NewAddress C
4

1 回答 1

2

可能你可以使用lag

select *,
  Lag(address,1,'0') over(partition by accountnumber order by validto) PreviousAddress
from address.NewAddress
于 2022-01-12T21:07:05.650 回答