2017-04-18 432 views
0

我想编写一个查询,以获取有关谁第一个聘请各部门中的员工的信息我写下面的查询,我得到“ORA-00904:‘RN’:无效的标识符00904

“ORA-00904: “RN”:无效的标识符 00904. 00000 - “%s的:无效的标识符”

查询:

select employee_id, department_id, first_name, last_name, hire_date, 
     ROW_NUMBER() over (partition by department_id order by hire_date) as rn 
from employees 
where rn =1; 

能否请您给我解释一下为w rong“标识符?

+0

添加查询文本而不是链接到图像 – Jens

+0

这是操作问题的顺序。 SELECT在引擎的where子句之后执行。所以在执行时,RN对where子句是未知的。像@GordonLinoff所说明的那样解决使用子查询或CTE的问题。 [有关先前堆栈问题的更多信息](http://stackoverflow.com/questions/17403935/what-is-the-order-of-execution-for-this-sql-statement) – xQbert

回答

2

你需要使用一个子查询或CTE:

select e.* 
from (select employee_id, department_id, first_name, last_name, hire_date, 
      ROW_NUMBER() over (partition by department_id order by hire_date) as rn 
     from employees e 
    ) e 
where rn = 1; 
相关问题