2017-03-02 62 views
0

我想弄明白这一点。我有一张有几十万行的桌子。每个作业#大约有8行。我需要根据另一列的最高值为每个作业#更新一列。其中oper_num是最大更新许多行 - 每组一行

enter image description here

作业的cntrl_point需要设置为1。

UPDATE jobroute 
SET cntrl_point = 1 
SELECT DISTINCT job, cntrl_point, MAX(oper_num) OVER (PARTITION BY job) MAX_Oper_Num 
FROM jobroute 
WHERE job not like 'J%' AND suffix = 0 

我假设我用错了OVER PARTITION。我想也许CURSOR会更合适,但我不知道该怎么做。

任何帮助将不胜感激。

+0

有可能为同一'job'值,在'oper_num'列2个或更多相同的最大值? –

回答

0

在SQL Server中,你可以使用这个row_number()

with toupdate as (
     select jr.*, row_number() over (partition by job order by oper_num desc) as seqnum 
     from jobroute jr 
     where job not like 'J%' AND suffix = 0 
    ) 
UPDATE toupdate 
    SET cntrl_point = 1 
    WHERE seqnum = 1; 
+0

谢谢你的回答。这会更新序列中的第一行,但不会更新oper_num具有最大值的那一行。 –

+0

我可能有这个; –

+0

UPDATE一个 SET a.cntrl_point = 1 FROM jobroute一个 INNER JOIN ( \t SELECT作业,MAX(oper_num)作为MAXOPERNUM \t FROM jobroute \t GROUP BY工作 \t --HAVING MAX( )B关于a.job = b.job和a.oper_num = b.MAXOPERNUM –