我有以下简单查询和结果表:
SELECT
[Client_ID],
[ClientName],
[EffectiveDate],
[MedConditionID],
[MedCondition]
FROM
[Medications]
结果表:
我需要填充[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个示例):
请帮忙,提出任何建议
我正在考虑一些Lag()/ Lead()函数,它们将相互比较记录,但不确定
谢谢!
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;