2014-04-18 29 views
0

我想通過匹配聯繫人ID將最新的時間戳從一個表中的行復制到另一個表中。基本上我有一個呼叫記錄表,我想向我的聯繫人表添加一個列,該列將包含對該聯繫人的最近呼叫的時間戳。有關列有:將最新的時間戳從一個表複製到另一個表

contact.leadId => callrecord.cid,contact.lastcall => callrecord.time

這是一對多的關係,因爲只有一個用於每個接觸行,但callrecord表可能會有很多行用於該聯繫人。

我已經試過這樣:

UPDATE contact 
JOIN callrecord ON contact.leadId = callrecord.cid 
SET contact.lastcall = MAX(callrecord.time) 
WHERE 1 

,但我得到一個錯誤說「無效使用組功能」。

有誰知道一種方法來做到這一點?

回答

0

你可以先做聚集:

UPDATE contact c JOIN 
     (select cid, MAX(cr.time) as maxtime 
     from callrecord 
     group by cid 
     ) cr 
     ON c.leadId = cr.cid 
    SET c.lastcall = MAX(cr.time) ; 

隨着callrecord(cid, time)索引,下面應該有更好的表現:

UPDATE contact c 
    SET c.lastcall = (SELECT MAX(time) FROM callrecord cr WHERE c.leadId = cr.cid); 

爲了保持這一點,雖然,你應該有一個insert觸發callrecord(也許還有updatedelete觸發器)。

相關問題