Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何根据下一条记录计算到期日期';T-SQL中的s[EffectiveDate]-1(SSMS 2017)?_Sql Server_Date_Calculated Field - Fatal编程技术网

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

Sql server 如何根据下一条记录计算到期日期';T-SQL中的s[EffectiveDate]-1(SSMS 2017)?,sql-server,date,calculated-field,Sql Server,Date,Calculated Field,我有以下简单查询和结果表: SELECT [Client_ID], [ClientName], [EffectiveDate], [MedConditionID], [MedCondition] FROM [Medications] 结果表: 我需要填充[ExpirationDate]字段-该字段基于下一条记录的[EffectiveDate]字段-1 例如

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

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

    FROM
         [Medications]
结果表:

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

例如,如果生效日期为“2019年1月16日”、“2019年10月16日”,则“2019年1月16日”的[到期日期]为“2019年10月15日”,以此类推

对于最大生效日期(本表中为'3/18/2020'),到期日期应始终为='2050/12/31'

请参阅下面更新的表格(我需要如何填充[ExpirationDate],我突出显示了前两个示例):

请帮忙提些建议

我在考虑一些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;