如何列出以下架构中特定经理下最近雇用员工的高级雇员?

时间:2016-09-16 10:20:18

标签: sql oracle

我有一个emp表的模式定义为emp(empno,ename,job,mgr,hiredate),我必须评估问题陈述的查询:

列出最近雇佣的员工在国王下工作的员工。

我将查询写成:

select hiredate from emp where hiredate < ANY 
( select e.hiredate from emp e where e.mgr= (select e.empno from emp e 
where e.ename='KING') order by hiredate desc )   

此查询提供语法错误,请帮帮我。

3 个答案:

答案 0 :(得分:1)

使用max函数 -

select hiredate 
from emp 
where hiredate < ( select max(hiredate) 
                   from emp 
                   where mgr= (select e.empno 
                               from emp e 
                                where e.ename='KING')); 

答案 1 :(得分:0)

要让员工在过去7天加入的King下工作,您可以尝试:

SELECT e.*
FROM emp e
WHERE e.mgr = (SELECT empno FROM emp WHERE ename='KING') AND
      e.hiredate > DATEADD(day, -7, GETDATE())

请注意,查找King的员工编号的子查询不相关。所以这是友好的子查询。

答案 2 :(得分:0)

使用max来查找最大的雇用日期和连接而不是子查询。

select * from emp where hiredate < 
  (select max(e.hiredate) 
   from emp e 
   join emp mg on e.mgr = mg.empno
   where mg.ename = 'KING')

我猜您有此错误消息

  

ORDER BY子句在视图,内联函数中派生无效   表,子查询和公用表表达式,除非TOP或FOR   还指定了XML。

所以你应该添加一个TOP 1来使它工作(但是,这真的更具可读性吗?)

select hiredate from emp where hiredate < ANY 
(select TOP 1 e.hiredate from emp e where e.mgr= (select e.empno from emp e 
where e.ename='KING') order by hiredate desc )