2013-08-13 2 views
0

작업 및 지불과 다 대일 관계가있는 중복 user_ids가있는 테이블이 있습니다.그룹 최대 MYSQL을 사용하여 테이블을 업데이트 하시겠습니까?

태스크에 최대 그룹 완료를 사용하여 태스크 완료 백분율이 가장 높은 행을 리턴했습니다. 그러나 동일한 테이블에서 가장 높은 지불 완료 통계로이 새 테이블을 업데이트하고 싶습니다. 예를 들어

는 :

id date     taskid payid task_completion pay_value 
4722 2007-11-08 16:20:14 2  3  7.14    0 
4722 2007-11-08 16:20:14 3  3  0.00    0 
4722 2007-11-08 16:20:14 5  3  0.00    0 
4722 2007-11-08 16:20:14 2  6  7.14    40 
4722 2007-11-08 16:20:14 3  6  0.00    40 
4722 2007-11-08 16:20:14 5  6  0.00    40 
4724 2007-11-20 15:32:40 4  7  25.71   105 
4726 2008-01-28 11:44:50 7  8  7.14    52 
4726 2008-01-28 11:44:50 8  8  34.29   52 
4726 2008-01-28 11:44:50 10  8  65.71   52 
4726 2008-01-28 11:44:50 7  9  7.14    24 
4726 2008-01-28 11:44:50 8  9  34.29   24 

그래서 다음과 같이 (고유 ID를 가진) 새 테이블을 만드는 작업 완료에 GroupWise에 최대를 사용했다 :

id date     taskid payid task_completion pay_value 
4722 2007-11-08 16:20:14 2  3  7.14    0 
4724 2007-11-20 15:32:40 4  7  25.71   105 
4726 2008-01-28 11:44:50 10  8  65.71   52 

문제는 ID에 대한 것입니다 4722 가장 높은 pay_value 및 payid가 결과 테이블에 삽입되지 않았습니다.

나는 (이 선택을 사용하여) 형태로이를 업데이 트하려는 :

SELECT 
    s1.payid, 
    s1.pay_value, 
FROM 
    f_tbl s1 
     LEFT JOIN 
    f_tbl s2 ON s1.cashid = s2.cashid 
     AND s1.pay_value > s2.pay_value 
WHERE 
    s2.cash_id IS NULL 
GROUP BY user_id; 

그것을이 쿼리를 기반으로 최종 테이블을 갱신하는 것은 불가능하다는 것을 보인다 그러나. 내가 어려움을 겪었습니다. 도움을 주셔서 감사합니다.

+0

조회에 cashid 당 최소 pay_value 선택 (그래서 당신은 4726 52이어야한다 얻고있는 결과를하지만, 24) : 조회를 가정하는 것은 정확 's1.pay_value

답변

0

이렇게하려면 updatejoin이 필요합니다. `s1.pay_value> s2.pay_value` 아마해야

update SummaryTable st cross join 
     (SELECT s1.payid, s1.pay_value, 
     FROM f_tbl s1 LEFT JOIN 
      f_tbl s2 
      ON s1.cashid = s2.cashid AND s1.pay_value > s2.pay_value 
     WHERE s2.cash_id IS NULL 
     GROUP BY user_id 
     ) toupdate 
    set st.payid = toupdate.payid, 
     st.pay_value = toupdate.pay_value 
    where st.taskid = 4722; 
관련 문제