2014-04-18 2 views
0

연락처 ID를 일치시켜 한 테이블의 행에서 다른 테이블로 최신 타임 스탬프를 복사하려고합니다. 기본적으로 통화 레코드 테이블이 있으며 해당 연락처에 대한 가장 최근 통화의 타임 스탬프가 포함될 열을 내 연락처 테이블에 추가하려고합니다. 관련 컬럼은 : 각각이 접촉을위한 하나의 행으로하지만 이것은 일대 다 관계이다한 테이블에서 다른 테이블로 최신 타임 스탬프 복사

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

callrecord.time 호출 기록 테이블에는 해당 연락처에 대해 가능한 많은 행이 있습니다.

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도 트리거됩니다).

관련 문제