我正在尝试通过匹配联系人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 :(得分: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
和update
个触发器上设置delete
触发器。