2017-10-12 62 views
0

试图从具有最高日期的另一个表格更新一列。使用wheres更新另一个表格

Table 1实施例:

PartNumber | Cost 
1000  | .10 
1001  | .20 

Table 2实施例:

PartNumber | Cost | Date 
1000  | .10 | 2017-01-01 
1000  | .50 | 2017-02-01 
1001  | .20 | 2017-01-01 
1002  | .50 | 2017-02-02 

我想更新表1与表2,从最近的值,这将是0.50每个...的查询我用来更新这个工作很好,直到我意识到我没有抓住正确的成本,因为有倍数..我现在想抓住最高的修订版本。

我的查询:

UPDATE dex_mfgx..insp_master 
    SET dex_mfgx..insp_master.costperpart = t2.sct_cst_tot 
    FROM dex_mfgx..insp_master AS t1 
    INNER JOIN qad_repl..sct_det_sql AS t2 
    ON t1.partnum = t2.sct_part 
    WHERE t1.partnum = t2.sct_part and t2.sct_cst_date = MAX(t2.sct_cst_date) ; 

我的错误:

Msg 147, Level 15, State 1, Line 6 
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference. 

不与具有或GROUPING多少运气,虽然我还没有大量使用他们..

任何有一个想法,有助于?

+0

那么,它是MySQL还是SQL Server ?,请使用相应的标记 – Lamak

+0

您是否试图用子查询获取MAX? –

回答

3

我想我明白你现在想要解决什么问题。感谢Lamak为我设置直线,因为我原本是离开基地的。

这样的事情我认为是你在找什么。

with TotalCosts as 
(
    SELECT t2.sct_cst_tot 
     , t1.partnum 
     , RowNum = ROW_NUMBER() over(partition by t1.partnun order by t2.sct_cst_date desc) 
    FROM dex_mfgx..insp_master AS t1 
    INNER JOIN qad_repl..sct_det_sql AS t2 ON t1.partnum = t2.sct_part 
) 

update t1 
set costperpart = tc.sct_cst_tot 
from dex_mfgx..insp_master AS t1 
join TotalCosts tc on tc.partnum = t1.partnum 
where tc.RowNum = 1 
+3

'和t2.sct_cst_date = t2.sct_cst_date'似乎不正确 – Lamak

+0

@Lamak我认为你是正确的。 :)我刚刚从原件复制,并没有注意到它是同一列。可能只是删除它。 –

+0

现在的问题是每个PartNumber在表2中有多行,而op只需要最后一个日期为 – Lamak

相关问题