我有一个无法解决自己的SQL问题。问题是我需要在员工表中计算资历开始日期。
该表非常简单,它有4列,第五列用于计算资历。
业务逻辑如下: 如果雇员在公司中开始,停职并在6个月内重新开始,则从他或她在公司中的第一个开始日期起计算其资历。 其他是新公司的开始日期。
我想,我们需要比较员工的开始日期和员工的上次停止日期。
答案 0 :(得分:0)
以下解决方案使用窗口函数获取第一个值。
基于通过累积总和的排名。
这是基于开始日期和上一个结束日期之间的月份差异。
不太漂亮,因为它使用2个子查询和3个窗口函数来完成看起来很简单的操作。
但是它确实返回了这些预期结果。
select
EmployeeID, Departement, [Company Start Date], [Company End Date],
first_value([Company Start Date]) over (partition by EmployeeID, CummSumRank order by [Company Start Date]) as SeniorityStart
from
(
select *, sum(MonthDiffStartVersusPreviousEndToBig) over (partition by EmployeeID order by [Company Start Date]) as CummSumRank
from
(
select EmployeeID, Departement, [Company Start Date], [Company End Date],
iif(datediff(month, lag([Company End Date]) over (partition by EmployeeID order by [Company Start Date]), [Company Start Date]) > 6, 1, 0) as MonthDiffStartVersusPreviousEndToBig
from Employees
) as q1
) as q2
order by EmployeeID, [Company Start Date];