我需要一个显示以下行的查询:
first_name last_name dept_no hire_date from_date
----------------------------------------------------------
Jianwen Schiper d004 1986-10-17 1986-10-17
Sanjiv Zschoche d004 1986-10-17 1986-10-17
Moty Winter d004 1991-04-28 1991-04-28
Zhilian Ranst d004 1991-04-28 1991-04-28
Jaewoo Yoshimura d004 1991-04-28 1991-04-28
Herbert Zizka d005 1985-03-21 1985-03-21
Arno Luke d005 1985-03-21 1985-03-21
Muzhong Shokrollahi d007 1985-09-05 1985-09-05
Isaac Bael d007 1985-09-05 1985-09-05
Mani Cannata d007 1989-06-21 1989-06-21
Lidong Tomescu d007 1989-06-21 1989-06-21
Taizo Kitsuregawa d007 1991-09-03 1991-09-03
Bodo Tagansky d007 1991-09-03 1991-09-03
简而言之,我需要同一个部门雇用的员工。 以下查询为我提供了员工的第一个部门和雇用日期:
select first_name, last_name, dept_no, hire_date, from_date
from employees join dept_emp using(emp_no)
where hire_date = from_date
order by hire_date, dept_no
我需要将同一天雇佣的人分开到同一个部门。我尝试了太多查询,但我无法得到我需要的东西。 在此先感谢您的帮助,并对不良的英语表示抱歉。
答案 0 :(得分:0)
如果您只想看到员工一起受雇,那么您可以订购结果:
select first_name, last_name, dept_no, hire_date, from_date
from employees join
dept_emp
using (emp_no)
order by dept_no, hire_date;
如果您想要雇用至少两名员工的日期(以及该日期的员工):
select first_name, last_name, dept_no, hire_date, from_date
from employees e join
dept_emp d
using (emp_no)
where exists (select 1
from employees e2
where e2.dept_no = e.dept_no and
e2.hire_date = e.hire_date and
e2.emp_no <> e.emp_no
)
order by dept_no, hire_date;
答案 1 :(得分:0)
所以这是关于雇员和他们当时雇用的部门的初次招聘。对于这种情况,您假设dept_emp.from_date
等于employees.hire_date
。
不幸的是,使用MySQL,您必须编写两次相同的查询,一次作为主查询,一次作为子查询(在其他DBMS中只使用count(*) over ()
)。
这是如何让员工拥有第一个部门:
select *
from employees e
join dept_emp de on de.emp_no = e.emp_no and de.from_date = e.hire_date
这是如何找到包含多个条目的第一部门/从最新组合:
select de.dept_no, de.from_date
from employees e
join dept_emp de on de.emp_no = e.emp_no and de.from_date = e.hire_date
group by de.dept_no, de.from_date
having count(*) > 1
这是两个组合:
select e.first_name, e.last_name, de.dept_no, e.hire_date, de.from_date
from employees e
join dept_emp de on de.emp_no = e.emp_no and de.from_date = e.hire_date
where (de.dept_no, de.from_date) in
(
select de.dept_no, de.from_date
from employees e
join dept_emp de on de.emp_no = e.emp_no and de.from_date = e.hire_date
group by de.dept_no, de.from_date
having count(*) > 1
)
order by de.dept_no, e.hire_date