SQL计算资历开始日期

时间:2018-06-30 16:59:45

标签: sql-server date business-logic

我有一个无法解决自己的SQL问题。问题是我需要在员工表中计算资历开始日期。

该表非常简单,它有4列,第五列用于计算资历。

业务逻辑如下: 如果雇员在公司中开始,停职并在6个月内重新开始,则从他或她在公司中的第一个开始日期起计算其资历。 其他是新公司的开始日期。

我想,我们需要比较员工的开始日期和员工的上次停止日期。

下面的例子: Table of employees

1 个答案:

答案 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];