首页 > 解决方案 > 选择 Oracle 中最年长和最年轻的员工

问题描述

我想选择工作场所中年龄最大和最年轻的员工。年龄最大的和最小的都是指他们的工作经历。我参考了以前的 SQL Server 问题并修改了我的代码如下,但我遇到了错误:

不合法的识别符。

我想知道对我更改代码有什么建议吗?

 SELECT d.Dtable_name,
        RANK() OVER(ORDER BY SUM(ROUND((SYSDATE - e.hire_date) / 365.24,0)) DESC) AS yrsexperience
   FROM Dtable_department d
   LEFT JOIN Etable_employee e
     ON d.department_id=e.department_id
WHERE yrsexperience =(SELECT MAX(d.department_name) KEEP(DENSE_RANK FIRST ORDER BY SUM(ROUND((SYSDATE - e.hire_date) / 365.24,0)) DESC) AS yrsexperience) AS Oldest)FROM Etable_employee e)

OR yrsexperience =(SELECT
       MIN(d.department_name) KEEP(DENSE_RANK LAST  ORDER BY SUM(ROUND((SYSDATE - e.hire_date) / 365.24,0)) DESC) AS yrsexperience) AS Youngest
  FROM Etable_employee e)

更新

我在参考下面的答案后编辑了代码,但它给了我错误:

在预期的地方找不到 FROM。

标签: sqloracle

解决方案


您可以使用FIRSTLAST聚合函数。

SELECT MAX(name) KEEP(DENSE_RANK FIRST ORDER BY yrs_experience ) AS Youngest,
       MAX(name) KEEP(DENSE_RANK LAST  ORDER BY yrs_experience ) AS Oldest
  FROM etable_employee;

推荐阅读