基于变量的条件匹配的MYSQL UPDATE行

时间:2014-12-11 19:10:43

标签: mysql sql

在手机系统方案中,我有2张桌子。

  • table1由以下内容组成:customer_idcall_durationcalldateskip_billing
  • table2由以下内容组成:customer_idbonus_seconds

table1存储所有客户的所有呼叫,table2存储bonus_seconds,表示定义客户允许的免费通话时间(即:对于客户1,FIRST 40累积秒数是免费的)。

我必须根据下面解释的条件编写一个更新table1的查询: 在table2中免费定义的调用中设置skip_billing。

所以我首先需要按customer_id进行分组,然后迭代调用,在call_duration上递增累积变量(cumsec)并相应地设置skip_billing。

table1的例子是:

|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中编写查询或过程来实现此行为? 非常感谢你

1 个答案:

答案 0 :(得分:0)

假设table有一个主键= 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