2014-07-25 106 views
0

我想更新一个名为hours的列,其中每个工作记录的操作编号在39之前。每项工作都由许多操作组成,最终操作始终为39号。例如,一项工作可能有一项操作30,31,32,35和最终39或另一项工作可能有30,31和39。每种情况下它只是39之前需要更新的操作,在这种情况下是35和31.SQL更新记录低于最大值

我设法得到一个选择脚本来列出每个作业编号的最大但一个操作编号,但无法派生更新版本以更新每个匹配记录的“小时”。

SELECT jrt.job, max(jrt.oper_num) AS oper_num 
FROM jrt_sch jrt 
INNER JOIN job j ON j.job = jrt.job 
WHERE j.type = 'S' AND jrt.job IN 
       (SELECT jrt.job 
       FROM jrt_sch jrt 
       INNER JOIN job j ON j.job = jrt.job 
       WHERE j.type = 'S' 
       GROUP BY jrt.job 
       HAVING max(jrt.oper_num) = 39) 
     AND oper_num < 39 
GROUP BY jrt.job 

这给

job oper_num 
    2109 31 
    2424 32 
    2509 32 
    2546 31 
    2418 31 
    3972 31 
+0

什么是您的数据库引擎? –

回答

0

对待你上面的查询作为派生表,加入到它的“工作”和更新记录的“小时”里oper_num =您的派生表oper_num 。根据您的数据库产品,它应该看起来像这样:

UPDATE js 
SET hours='some value' 
FROM jrt_sch js 
INNER JOIN (
    <Your Query Above> 
) m 
    ON js.job=m.job 
    AND js.oper_num=m.oper_num