【发布时间】:2015-08-16 00:54:19
【问题描述】:
**Table Employee**
Id Name
1 EmpName1
2 EmpName2
3 EmpName3
**Table EmpDeptHistory**
Id EmpId Dept Date
1 1 Housing 2015-03-02
2 2 Finance 2015-01-03
3 1 WareHouse 2015-05-02
4 2 Housing 2015-02-06
5 3 WareHouse 2015-02-02
6 1 Housing 2015-05-01
7 2 Finance 2015-01-02
8 2 Housing 2015-05-04
9 2 Finance 2015-05-02
10 1 WareHouse 2015-03-08
11 1 Housing 2015-02-20
我需要找到每个员工最近工作的部门。我还需要通过 EmpId 找到个别员工
以下查询仅返回一名员工,而不是全部:(
SELECT e.id, edh.dept,edh.date
FROM Employee e
inner join (select top 1 eh.empid, eh.dept, eh.date
from EmpDeptHistory eh
order by eh.date desc) as edh
on e.id=edh.empid
是的,我知道前 1 名将根据日期给出 emp id,因此只显示一名员工详细信息。我不知道如何获取所有员工最近的部门。
select e.id,edh.dept,edh.date
from employee e
inner join EmpDeptHistory edh
on e.id = (Select eh.empid, eh.dept, eh.date
from EmpDeptHistory eh
where e.id=eh.empid
order by eh.date desc)
以上抛出
ORDER BY 子句在视图、内联函数、派生中无效 表、子查询和公用表表达式,除非 TOP, 还指定了 OFFSET 或 FOR XML。
【问题讨论】:
-
什么是
recent dept? -
@GiorgiNakeuri 根据日期,员工最近工作的部门。对于emp id 1,仓库是最近的部门。 (第二个表中的 ID-3)
-
“最近的部门”是指员工工作的最近/最后一个部门吗?
-
@TechJerk 好的,我会在此基础上发布答案。
标签: sql sql-server sql-server-2012 inner-join