编程大师,
我需要帮助。这是员工数据,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中做到这一点,或者甚至不可能。我想知道是否还有其他方法?请帮助我
答案 0 :(得分:0)
在版本8之前的MySQL中,这相当复杂。但是您可以这样做:
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
。