Дата расчета старшинства по SQL - PullRequest
0 голосов
/ 30 июня 2018

У меня проблема с SQL, которую я не могу решить самостоятельно. Проблема в том, что мне нужно рассчитать дату начала трудового стажа в таблице сотрудников.

Таблица довольно проста, в ней 4 столбца и пятая часть для расчетного стажа.

Бизнес-логика выглядит следующим образом: Если сотрудник начинает работать в компании, останавливается и начинает работу снова в течение 6 месяцев, его трудовой стаж учитывается с первой даты начала работы в компании. Еще одна дата начала новой компании.

Нам нужно сравнить начальную дату сотрудников с датой последней остановки сотрудников.

см. Приведенный ниже пример: Table of employees

1 Ответ

0 голосов
/ 30 июня 2018

В приведенном ниже решении используются оконные функции для получения первого значения.

На основе рейтинга через накопленную сумму.
Который основан на месячной разнице между начальной датой и предыдущей конечной датой.

Не совсем красиво, поскольку он использует 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];
...