1
(在Oracle数据库SQL查询)选择值
我试图显示基于最高优先级的工作记录的设备ID号(最低数)与工作相关的所有任务。我还需要显示作业的所有任务,因此我不能将查询限制为具有最高优先级的任务。由于最高优先级是1(其次是2,因此等等),查询具有优先级1的任务将始终有效。问题是,有时优先级为1的任务被删除,因此优先级2任务成为最高优先级(不能有重复的优先级,优先级始终为整数)。
下面是一个简单的查询基于对优先级任务拉设备ID时的工作原理:
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
上面的查询会产生以下结果,如果它有3项任务:
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
但是,如果从作业中删除优先级为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)
:
我试图做基本上沿着这些线路的东西,但它不工作(给出了群功能在这里不允许消息)函数,但似乎永远不会找到一个适用于我想要完成的工作。任何帮助将不胜感激。
工作对于Oracle的什么版本?这是一个分层查询,直到11gR2之前,Oracle不支持递归CTE。 – 2011-01-12 22:53:47
Oracle的版本是10gR2 – pablo 2011-01-12 23:10:16