2014-12-11 2 views
0

전화 시스템 시나리오에서 나는 2 개의 테이블을 가지고 있습니다. customer_id, call_duration, calldate, skip_billing :변수 기반의 조건에서 일치하는 MYSQL UPDATE 행

  • 표 1은로 구성된다.
  • table2는 customer_id, bonus_seconds으로 구성됩니다.

table1은 모든 고객에 대한 모든 호출을 저장하고 table2는 정의 된 고객에게 허용 된 자유 대화 시간을 나타내는 bonus_seconds를 저장합니다. 즉 고객 1의 경우 FIRST 40 누적 초는 무료입니다.

아래와 같이 조건에 따라 table1을 업데이트하라는 쿼리를 작성해야합니다. table2에서 정의 된 호출 내에서 skip_billing을 설정하십시오.

그래서 먼저 customer_id로 그룹화 한 다음 call_duration에 누적 변수 (cumsec)를 증가시키고 그에 따라 skip_billing을 설정해야합니다.

표 예는 다음과 같습니다

|customer_id |billsec | skipbill| 
|1   |12  | 0  | 
|1   |10  | 0  | 
|1   |15  | 0  | 
|1   |8  | 0  | <--need to set 1 due to cumsec=45 for customer_id=1 
|2   |12  | 0  | <--nop 
|3   |12  | 0  | <--nop 
|2   |12  | 0  | <--need to set 1 due to cumsec=24 for customer_id=2 
|1   |12  | 0  | <--need to set 1 .... 
|3   |15  | 0  | <--need to set 1 due to cumsec=27 for customer_id=3 

|customer_id |bonus_seconds| 
|1   |40   | 
|2   |20   | 
|3   |15   | 

내가이 동작을 달성하기 위해 SQL의 쿼리 나 프로 시저를 작성 할 수 있습니까? 당신에게

+0

가 기본 키로 귀하의 질문에 –

답변

0

가정 테이블에 기본 키가 정말 고마워요 = ID 당신은 시도 할 수 있습니다 :

SET SQL_SAFE_UPDATES=0; 
update table table1 
join (select id, sum(billsec) s from table 
      group by id having sum(billsec) < 1000) t1 
on (t1.id = table1.id) 
set table1.skipbill = 1 
+0

슬프게도 난 가정 할 수없는 ID를 당신이있어 오류를 복사/게시하시기 바랍니다. ID별로 그룹화 할 때 합계를 달성하는 방법은 무엇입니까? 어쨌든 고마워요 –

+0

테이블의 기본 키 또는 고유 키는 무엇입니까 –

+0

지금은 존재하지 않습니다 –