如何根据 T-SQL (SSMS 2017) 中的下一条记录 [Effective Date]-1 计算到期日期?
Posted
技术标签:
【中文标题】如何根据 T-SQL (SSMS 2017) 中的下一条记录 [Effective Date]-1 计算到期日期?【英文标题】:How to calculate expiration date based on next record's [EffectiveDate]-1 in T-SQL (SSMS 2017)? 【发布时间】:2020-04-10 22:37:42 【问题描述】:我有以下简单查询和结果表:
SELECT
[Client_ID],
[ClientName],
[EffectiveDate],
[MedConditionID],
[MedCondition]
FROM
[Medications]
结果表:
我需要填充 [ExpirationDate] 字段 - 它基于下一条记录的 [EffectiveDate] 字段 - 1。
例如 - 如果生效日期是“2019 年 1 月 16 日”、“2019 年 10 月 16 日”,那么“2019 年 1 月 16 日”的 [ExpirationDate]=“2019 年 10 月 15 日”等。
对于最大生效日期(在此表中为“2020 年 3 月 18 日”),到期日期应始终为“2050/12/31”
请参阅下面的更新表(我需要如何填充 [ExpirationDate],我突出显示了第一个 2 个示例):
请帮忙提出任何建议
我在考虑一些 Lag() / Lead() 函数,它们将相互比较记录,但不确定
谢谢!
【问题讨论】:
【参考方案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;
【讨论】:
谢谢你,我会试试的,看起来这行得通:)以上是关于如何根据 T-SQL (SSMS 2017) 中的下一条记录 [Effective Date]-1 计算到期日期?的主要内容,如果未能解决你的问题,请参考以下文章