Sql 如何在表中找到大于引用它的所有值的目标值?
我需要找到在所有下属的雇佣日期之后被雇佣的老板的名字。 以下是我到目前为止得到的信息:Sql 如何在表中找到大于引用它的所有值的目标值?,sql,oracle,Sql,Oracle,我需要找到在所有下属的雇佣日期之后被雇佣的老板的名字。 以下是我到目前为止得到的信息: SELECT DISTINCT TRIM(boss.first_name || ' ' || boss.last_name) AS NAME, boss.phone_number AS phone FROM HR.employees e INNER JOIN HR.employees boss ON (boss.employee_id = e.manager_id) WHER
SELECT DISTINCT
TRIM(boss.first_name || ' ' || boss.last_name) AS NAME,
boss.phone_number AS phone
FROM
HR.employees e
INNER JOIN HR.employees boss ON (boss.employee_id = e.manager_id)
WHERE
boss.hire_date > MIN(e.hire_date)
AND boss.hire_date > MAX(e.hire_date);
其目的是检查boss.hire_日期是否大于其下属最早和最新的雇用日期
但是,我收到以下错误消息:
ORA-00934:此处不允许使用组功能
知道我必须如何重新构造查询吗?这应该会更好
SELECT TRIM(boss.first_name || ' ' || boss.last_name) AS NAME,
boss.phone_number AS phone
FROM HR.employees boss
INNER JOIN
(
SELECT e.manager_id, MAX(e.hire_date) AS Max_hire_date
FROM HR.employees e
GROUP BY e.manager_id
) m ON m.manager_id=boss.employee_id
WHERE boss.hire_date > m.Max_hire_date
请注意,我认为老板不能自我管理。在通常的分层数据库中,顶级管理器的manager_id字段为NULL。如果在您的数据中,某个上司可以拥有其经理id=其自己的员工id,那么它将不起作用。使用子选择获取给定上司的所有员工的最长雇佣日期,并在
WHERE
子句中检查该日期如何
您可能需要筛选此列表中不是老板的员工
比如:
DISTINCT是
选择DISTINCT
的一部分。也就是说,将DISTINCT关键字移到上面一行-使代码更清晰。
SELECT boss.*
FROM hr.employees boss
WHERE boss.hire_date > (SELECT MAX(e.hire_date)
FROM hr.employees e
WHERE boss.employee_id = e.manager_id);