计算工作年限
Posted
技术标签:
【中文标题】计算工作年限【英文标题】:Count Years of Employment 【发布时间】:2019-05-01 20:14:58 【问题描述】:如果第二个职位是在第一个职位结束后的第二天开始的,我正在尝试找到一种使用 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')
如您所见,第一个插入语句中的开始日期是第二个插入语句中结束日期之后的第二天。
我的预期结果是仅更新第二个插入语句中的 enddate 并将其设置为 null。
第三个插入语句中的结束日期不应更改,因为第三个语句中的结束日期与第二个语句中的开始日期之间的差异超过 1 天
【问题讨论】:
我试过了,但是没有用: UPDATE EmploymentDateRanges SET EndDate = GETDATE() WHERE ID in (SELECT ID FROM EmploymentDateRanges WHERE EndDate IS NOT NULL GROUP BY ID, StartDate, EndDate HAVING DATEDIFF(DAY,MIN(EndDate), MAX(StartDate)) 【参考方案1】:如果我理解正确,您可以使用自我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)
【讨论】:
以上是关于计算工作年限的主要内容,如果未能解决你的问题,请参考以下文章