【问题标题】:Select Max Value from Group从组中选择最大值
【发布时间】:2014-04-15 04:24:20
【问题描述】:

我真的很难解决这个问题。我试图找到每个部门病假最多的员工。如果他们仍然是当前员工,则他们没有结束日期。我已经尝试尽我所能进行调整,但我不断得到多个结果。我只想要每个部门内工作时间最多的员工。

Select H.DepartmentID, max(E.SickLeaveHours) as MaxSick, E.EmployeeID
From HR.Department as D,
     HR.EmployeeDepartmentHistory as H,
     HR.Employee as E
Where E.EmployeeID = H.EmployeeID
and D.DepartmentID = H.DepartmentID
and H.EndDate is null
group by H.DepartmentID, E.EmployeeID

DepartmentID   MaxHours        EmployeeID
7              61              8
1              22              9
7              64              10
1              23              11
1              20              12

【问题讨论】:

标签: sql group-by subquery max


【解决方案1】:
select temp.DepartmentID, temp.SickLeaveHours as MaxSick, EH.EmployeeID from
(Select H.DepartmentID DepartmentID, max(E.SickLeaveHours) SickLeaveHours
From HR.Department D,
HR.EmployeeDepartmentHistory H,
HR.Employee E
Where E.EmployeeID = H.EmployeeID
and D.DepartmentID = H.DepartmentID
and H.EndDate is null
group by H.DepartmentID) temp, HR.EmployeeDepartmentHistory EH, Employee emp
Where EH.DepartmentID = temp.DepartmentID
and emp.SickLeaveHours = temp.SickLeaveHours
and emp.employeeId = EH.employeeId

解决方案的第一步是找到每个部门的最大病假。上面的内部查询回答了这个问题。

下一步是查找与该最大小时数匹配的该部门的员工,这由外部查询中的连接来回答。

如果多个员工的最长病假时间相同,则查询将返回部门的所有此类员工。

不知道这在这里是否相关,但在我看来,病假时间在某种程度上是员工的累积时间,无论他/她在哪个部门工作,因为病假时间是“属性” “员工”而不是“员工部门历史”。因此,病假小时数可能在前一个部门中消耗/获得,但会出现在当前部门(其中 enddate 在 EmployeeDepartmentHistory 中为空)对于此查询。

【讨论】:

  • 感谢您的帮助!这让我到达了我需要的地方。
猜你喜欢
  • 1970-01-01
  • 2013-10-06
  • 2019-07-31
  • 2021-01-29
  • 2015-03-06
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 2015-05-28
相关资源
最近更新 更多