**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 идентификатор на основе даты, следовательно, только один деталь работника шоу. Я не уверен, как получить весь недавний отдел персонала.
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.
Что такое 'недавний отдел'? –
@GiorgiNakeuri - отдел, с которым недавно работал сотрудник, основанный на Дате. Для emp id 1 склад является последним департаментом. (Id-3 во второй таблице) –
Под «недавним делом» вы имеете в виду последний/последний отдел, над которым работал сотрудник? –