私はemployee
というテーブルを1つまたは2つの "将来の"ジョブをテーブルfuture_jobs
に持つことができます。相関サブクエリをCASE WHEN文から取り除く
| employee_id | job_id | job_start_date | job_end_date |
|-------------|--------|----------------|--------------|
| 1 | 127589 | 12-SEP-2016 | 25-DEC-2016 |
| 1 | 834780 | 26-DEC-2016 | 08-AUG-2017 |
| 2 | 800253 | 20-OCT-2016 | 13-APR-2017 |
将来の各ジョブの説明は、特定のパラメータ(例: F1
およびF2
であり、降順であるjob_start_date
に基づいています。上記の例では、employee_id = 1
の場合、次のクエリをjob_id = 127589
行に対して実行すると、employee_id = 1
の2つの行のうち最も早い日付がjob_start_date = 12-SEP-2016
であるため、をjob_id = 834780
と呼びます。
およびemployee_id = 2
の場合、将来のジョブが1つしかないので、get_description(emp.employee_id, 'F1')
を以下のクエリで呼び出す必要があります。現在、次のクエリで関連情報を取得できます。
select
emp.employee_id,
case
when fj.job_start_date = (select max(job_start_date)
from future_jobs
where employee_id = fj.employee_id
group by employee_id
having count(employee_id) > 1)
then get_description(emp.employee_id, 'F2')
else get_description(emp.employee_id, 'F1')
end job_description,
fj.job_start_date
jd.some_additional_columns
from employees emp
join future_jobs fj
on emp.employee_id = fj.employee_id
join job_details jd
on jd.job_id = fj.job_id
and jd.job_start_date = fj.job_start_date
and jd.job_end_date = fj.job_end_date
| employee_id | job_description | job_start_date | jd.columns |
|-------------|----------------------|----------------|--------------|
| 1 | 1st future job desc | 12-SEP-2016 | .... |
| 1 | 2nd future job desc | 26-DEC-2016 | .... |
| 2 | 1st future job desc | 20-OCT-2016 | .... |
ただし、相関サブクエリをCASE WHEN文から取り除く別の方法があるかどうかを知りたいと思いますか?相関サブクエリを使用せずにそれを行う方法さえありますか?私はこれをWITH
節タイプの解法を使うのではなく、1つのステートメントで行う必要があります。
ありがとうございました。それが私が探していたものです。クエリが返すべき内容を説明するために説明を更新しました。このソリューションのパフォーマンスと質問のパフォーマンスをどのように比較しますか?どのような条件下で、パーティショニングと分析機能が優れていますか? – Malvon