0

私は次のselectを作成しました:

select e.first_name, e.last_name, 
   (select jobname_id from 
       (select j.id, j.jobname_id, first_value(j.jobname_id) 
        over (order by j.date_from desc) as current_job 
        from jobs j where j.emp_id=e.emp_id and j.date_from < sysdate) 
    where jobname_id != current_job and rownum=1) as previous_job 
from employees e

しかし、「ORA-00904:「E」。「EMP_ID」:無効な識別子」が表示されます。

サブクエリでE.EMP_IDへの参照を使用するにはどうすればよいですか?

4

2 に答える 2

1

できませんが、結合を外側のサブクエリに移動することはできます。ただし、分析関数でうまく機能するかどうかはわかりません。

select e.first_name, e.last_name, 
   (select jobname_id from 
       (select j.emp_id, j.id, j.jobname_id, first_value(j.jobname_id) 
        over (order by j.date_from desc) as current_job 
        from jobs j where j.date_from < sysdate) j
    where j.emp_id=e.emp_id and jobname_id != current_job and rownum=1) as previous_job 
from employees e
于 2011-09-21T08:29:20.697 に答える
1

このソリューションがあなたのニーズに対して十分に速いかどうかはわかりませんが、計画どおりに機能するはずです。また、追加フィールド「date_to」について、Ollieに同意します。それは物事を簡単にするでしょう。

select
  e.first_name   as first_name,
  e.last_name    as last_name,
  sub.jobname_id as jobname_id
from 
  employees e,
  (
    select
      j.emp_id     as emp_id,
      j.jobname_id as jobname_id,
      row_number()
        over (
          partition by j.emp_id
          order by     j.date_from desc
        ) as job_order
    from
      jobs j
    where j.date_from < sysdate
  ) sub
where sub.emp_id    = e.emp_id
  and sub.job_order = 2
于 2011-09-21T10:47:47.440 に答える