在手机系统方案中,我有2张桌子。
customer_id
,call_duration
,calldate
,skip_billing
。customer_id
,bonus_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中编写查询或过程来实现此行为? 非常感谢你
答案 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