我的数据库如下所示:
表:dept_emp:
+--------------------------+-----------------------+------------------------+
| emp_no (Employee Number) | from_date (Hire date) | to_date (Worked up to) |
+--------------------------+-----------------------+------------------------+
| 5 | 1995-02-27 | 2001-01-19 |
| 500 | 1968-01-01 | 9999-01-01 |
+--------------------------+-----------------------+------------------------+
注意:如果员工目前仍在公司工作,他们的 to_date 将显示 9999-01-01
。
我想要做的是显示工作时间最长的员工的 emp_no。我不知道如何使用数据库中的随机 9999-01-01
来做到这一点。
这是我到目前为止所想到的:
SELECT emp_no
FROM (SELECT max(datediff( (SELECT to_date
FROM dept_emp),
(SELECT from_date
FROM dept_emp)
)
)
);
这不起作用,而且也没有考虑 9999-01-01
。
我想我应该在他们的某个地方使用CURDATE()
?
最佳答案
你可以尝试这样的事情:
select
d.*,
datediff(
case when to_date = '9999-01-01' then current_date else to_date end,
from_date) as how_long
from dept_emp d
where
datediff(
case when to_date = '9999-01-01' then current_date else to_date end,
from_date) = (
-- find the longest tenure
select max(datediff(
case when to_date = '9999-01-01' then current_date else to_date end,
from_date))
from dept_emp
)
如果这是您表格中的信息类型:
create table dept_emp (
emp_no int,
from_date date,
to_date date
);
insert into dept_emp values
(1, '2000-01-01', '2000-01-02'),
(2, '2000-01-01', '2005-02-01'),
(3, '2000-01-01', '9999-01-01');
您的结果将是:
| emp_no | from_date | to_date | how_long |
|--------|---------------------------|---------------------------|----------|
| 3 | January, 01 2000 00:00:00 | January, 01 9999 00:00:00 | 5902 |
示例 SQLFiddle:http://sqlfiddle.com/#!9/55886/11
关于mysql - 在SQL中选择工作时间最长的员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35686652/