我有以下代码,但我没有得到真正的结果。 我只得到一个员工的结果,我想要的是我桌子上的所有员工。
代码是:
Select * From
(Select EmpNo, EmpEName
from EmployeeMainFile
Group By EmpNo, EmpEName) s2
INNER Join
(Select DISTINCT EmpSNo,EmpSTotalSalary
from EmpSalary where ID =
(Select Max(ID) from EmpSalary)
Group by EmpSNo,EmpSTotalSalary) s1
on s1.EmpSNo = s2.EmpNo
答案 0 :(得分:1)
因为子查询表达式Select Max(ID) from EmpSalary
仅返回整个工资集的一个ID。您需要每个员工的最大(ID)。
如果ID
s依次增加,ID
(每个员工)的最大值代表该员工的最新,当前工资,那么:
Select e.EmpNo, e.EmpEName, Max(EmpSTotalSalary) MaxSalary
From EmployeeMainFile e
Join EmpSalary s
on s.EmpSNo = e.EmpNo
and s.ID = (Select Max(ID)
from EmpSalary
Where EmpSNo = s.EmpSNo)
Group By e.EmpNo, e.EmpEName
答案 1 :(得分:0)
Select * From
(Select EmpNo, EmpEName
from EmployeeMainFile
Group By EmpNo, EmpEName) s2
INNER Join
(Select EmpSNo,Max(EmpSTotalSalary) from EmpSalary
Group by EmpSNo) s1
on s1.EmpSNo = s2.EmpNo
更新的答案
Select * From
(Select EmpNo, EmpEName
from EmployeeMainFile
Group By EmpNo, EmpEName) as s2
INNER Join
(
SELECT * FROM
(
Select EmpSNo,ROW_NUMBER()OVER(PARTITION BY EmpSNo ORDER BY TIMESTAMP DESC) as Latest
from EmpSalary
) AS ABC
WHERE ABC.Latest =1 ) as s1
on s1.EmpSNo = s2.EmpNo