2017-10-12 73 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

相關問題