如果第二个位置是在第一个职位结束后的第二天启动的,我正在尝试使用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')如您所见,第一个insert语句中的开始日期是第二个insert语句中结束日期之后的第二天。
我的预期结果是只更新第二个insert语句中的结束日期,并将其设置为null。
第三条insert语句中的结束日期不应更改,因为第三条语句中的结束日期与第二条语句中的开始日期之间的差异超过1天。
发布于 2019-05-01 20:22:52
如果我的理解正确,您可以使用self join和dateadd
update e
set e.enddate = null
from EmploymentDateRanges e
join EmploymentDateRanges e2 on dateadd(day, 1, e.enddate) = e2.startdate这将为enddate添加1天时间,并查看该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)https://stackoverflow.com/questions/55942176
复制相似问题