Посчитайте Годы Занятости - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь найти способ использовать sql для обновления конечной даты занятости для любого пользователя, если вторая позиция была открыта на следующий день после окончания первой позиции.заранее спасибо!

Вот мои данные:

DECLARE @EmploymentDateRanges TABLE
        (
            ID INT IDENTITY (1, 1),
            StartDate DATETIME,
            EndDate DATETIME
        )

INSERT INTO @EmploymentDateRanges
VALUES ('11/1/2018', null)

INSERT INTO @EmploymentDateRanges
VALUES ('8/24/1995', '10/31/2018')

INSERT INTO @EmploymentDateRanges
VALUES ('5/25/1990', '8/24/1994')

Как видите, начальная дата в первом операторе вставки - следующий день после конечной даты во втором операторе вставки.

Мой ожидаемый результат - обновить только конечную дату во втором операторе вставки и установить для нее значение null.

Дата окончания в третьем операторе вставки не должна изменяться, поскольку разница между конечной датой в третьем операторе и начальной датой во втором операторе составляет более 1 дня

1 Ответ

1 голос
/ 01 мая 2019

Если я правильно понимаю, вы можете использовать self join и dateadd:

update e
set e.enddate = null
from EmploymentDateRanges e 
   join EmploymentDateRanges e2 on dateadd(day, 1, e.enddate) = e2.startdate

Это добавляет 1 день к enddate и проверяет, есть ли соответствующие записи счто startdate.Если это так, он обновляет enddate до null.


Другой вариант будет использовать exists:

update e
set e.enddate = null
from EmploymentDateRanges e 
where exists (select 1
              from EmploymentDateRanges e2
              where dateadd(day, 1, e.enddate) = e2.startdate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...