Привет, мастер программирования,
Мне нужна помощь в этом. Это данные сотрудника, NULL
в TerminationDate
относятся к текущей дате, это означает, что сотрудник все еще работает. Мне нужно найти самое длинное время (в днях), когда никто не нанимается или не прекращается.
Название таблицы: Имя столбца Employee
: ID
, HireDate
, TerminationDate
Employee
ID HireDate TerminationDate
1 2009-06-20 2016-01-01
2 2010-02-12 NULL
3 2012-03-14 NULL
4 2013-09-10 2014-01-01
5 2013-09-10 NULL
6 2015-04-10 2015-05-01
7 2010-04-11 2016-01-01
8 2012-05-12 NULL
9 2011-04-13 2015-02-13
Я разработал процесс того, что нужно делать
HireDate
и TerminationDate
(он должен содержать 18 строк)Однако я не знаю, как это сделать в MySQL или если это возможно. Интересно, есть ли какой-нибудь другой метод? пожалуйста, помогите мне
Это довольно сложно в MySQL, до версии 8. Но вы можете сделать:
select dte, next_dte,
datediff(coalesce(next_dte, curdate()), dte) as diff
from (select dte,
(select min(d2.dte)
from ((select hiredate as dte
from t
) union -- intentionally remove duplicates
(select terminationdate as dte
from t
where teminationdate is not null
)
) d2
where d2.dte > d.dte
) next_dte
from ((select hiredate as dte
from t
) union -- intentionally remove duplicates
(select terminationdate as dte
from t
where teminationdate is not null
)
) d
) d
order by diff desc
limit 1;
Обратите внимание, что это находит последний период, основанный на текущей дате. Вы можете отрегулировать это, заменив curdate()
на любую дату отсечения, которую вы имеете в виду. Если вам не нужен последний период, добавьте, where next_dte is not null
для внешнего запроса.