如何根据T-SQL(SSMS 2017)中下一条记录的[EffectiveDate] -1计算到期日期?

问题描述 投票:0回答:1

我有以下简单查询和结果表:

    SELECT 
          [Client_ID],
          [ClientName],
          [EffectiveDate],
          [MedConditionID],
          [MedCondition]

    FROM
         [Medications]

结果表:

enter image description here

我需要填充[ExpirationDate]字段-这是基于下一条记录的[EffectiveDate]字段-1。

例如,如果生效日期为'1/16/2019','10/16/2019',则'1/16/2019'的[ExpirationDate] = '10 / 15/2019',依此类推

对于最大有效日期(在此表中为'3/18/2020',有效期应始终为='2050/12/31']

请参见下面的更新表(我如何填充[ExpirationDate],我突出显示了第1个2个示例):

enter image description here

请帮忙,提出任何建议

我正在考虑一些Lag()/ Lead()函数,它们将相互比较记录,但不确定

谢谢!

sql-server date calculated-field
1个回答
1
投票
declare @Medications table
(
[Client_ID] int,
[ClientName] varchar(50),
[EffectiveDate] date,
[MedConditionID] int,
[MedCondition] varchar(50)
);


insert into @Medications(Client_Id, ClientName, EffectiveDate, MedConditionId, MedCondition)
values
(100, 'jeffrey', '20190116', 123, 'Alcohol'),
(100, 'jeffrey', '20191016', 123, 'Alcohol'),
(100, 'jeffrey', '20191016', 267, 'Head'),
(100, 'jeffrey', '20191220', 123, 'Alcohol'),
(100, 'jeffrey', '20191220', 267, 'Head'),
(100, 'jeffrey', '20200121', 123, 'Alcohol'),
(100, 'jeffrey', '20200121', 267, 'Head');


select EffectiveDate, 
    dateadd(day, -1,
    lead(EffectiveDate, 1, '20510101' ) over(partition by Client_id, MedConditionId order by EffectiveDate)
    ) as ExpirationDate,
    *
from @Medications;
© www.soinside.com 2019 - 2024. All rights reserved.