Как рассчитать дату истечения срока действия на основе [EffectiveDate] -1 следующей записи в T- SQL (SSMS 2017)? - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть следующий простой запрос и полученная таблица:

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

    FROM
         [Medications]

Результирующая таблица:

enter image description here

Мне нужно для заполнения поля [ExpirationDate] - которое основано на поле [EffectiveDate] следующей записи - 1.

Например, если даты вступления в силу - «16.01.2009», «10/16/2019», то [ExpirationDate] для '1/16/2019' = '10 / 15/2019 ', и т. Д. c.

Для самой большой даты вступления в силу (в этой таблице это' 3/18/2020 '), дата окончания срока действия всегда должна быть = '2050/12/31'

Пожалуйста, смотрите обновленную таблицу ниже (как мне нужно заполнить [ExpirationDate], я выделил 2 первых примера):

enter image description here

Плз, помогите с любыми предложениями

Я думал о некоторых функциях Lag () / Lead (), которые будут сравнивать записи между собой, но не уверен

Спасибо!

1 Ответ

1 голос
/ 12 апреля 2020
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...