我正在尝试编写一个查询,它将返回每个部门的第一个雇佣男性。到目前为止,我已经得到以下信息:
$set:{'a':1,'b':2}
这只是给了我们在他们部门雇用的第一个男人的名字。如果一个女性是第一个被雇用的人,那么它不会为该部门返回结果 - 如何更改查询以返回我想要的所有部门的结果?
答案 0 :(得分:1)
使用窗口功能:
select e.*
from (select e.*,
row_number() over (partition by workdept, sex
order by hiredate) as seqnum
from emp
) e
where seqnum = 1;
编辑:
如果您希望每个人都在第一天受雇,请使用rank()
或dense_rank()
代替row_number()
。
答案 1 :(得分:0)
我使用窗口函数..可能是Rank而不是Row_Number ..但你也可以加入子查询。
SELECT
e.firstname + ' ' + e.lastname AS Name,
e.hiredate,
e.workdept
FROM
emp e
JOIN (SELECT
sex,
workdept,
MIN(hiredate) hiredate
FROM
emp
GROUP BY
sex,
workdept
) hire ON e.sex = hire.sex
AND e.hiredate = hire.hiredate
AND e.workdept = hire.workdept