(Oracle DBのSQLクエリ)異なる列の最小値に基づいて結合テーブルから値を選択
最高の優先度(最低の数値)に基づいてジョブレコードに機器ID番号を表示しようとしていますが、ジョブに関連するすべてのタスクのまた、ジョブのすべてのタスクを表示する必要があるため、クエリを最も優先度の高いタスクに限定するだけでは不十分です。最高のプライオリティは1(2番目のプライオリティが2番目に高くなるなど)であるため、優先度1のタスクのクエリは常に機能します。問題は、優先度1のタスクが削除されることがあり、優先度2のタスクが最高の優先度になることです(優先度は重複しないことが多く、優先度は常に整数です)。
TITLE JOBNUM EQID PRIOR DESC PEQID
newjob 123 HAQ7 1 fix this HAQ7
newjob 123 PDL 2 clean this HAQ7
newjob 123 ACCH 3 move this HAQ7
:それは3つのタスクを持っている場合は、上記のクエリは次のような結果を生じるであろう
SELECT j.title,
j.jobnum,
a.eqid,
a.prior,
a.desc,
b.eqid peqid
FROM JOB j
LEFT JOIN TASK a ON a.jobnum = j.jobnum
LEFT JOIN TASK b ON b.jobnum = j.jobnum
AND b.prior = 1
WHERE j.jobnum = '123'
ORDER BY a.prior
:タスクここ
は、優先度1に基づいて機器IDを引いたときに動作するサンプルクエリですただし、優先度1のタスクがジョブから削除された場合は、そのジョブに機器IDを割り当てる優先度の最も低いタスクを見つける必要があります。グループに参加して
select job.title, job.jobnum, task.eqid, task.prior, task.desc, tp.eqid peqid
from job
left join task on job.jobnum = task.jobnum
left join task tp on job.jobnum = tp.jobnum
and tp.prior = min(tp.prior)
私は、サブクエリを使用して調査:
は私は基本的に、これらの線に沿って何かをしようとしていたが、それは動作しません(グループ機能は、ここで許可されていないメッセージが表示されます)私が達成しようとしているもののために働くものを見つけることは決してできないようです。どんな助けでも大歓迎です。
オラクルで働くこと?これは階層的なクエリであり、11gR2までOracleでは再帰的なCTEはサポートされていませんでした。 –
オラクルのバージョンは10gR2です – pablo