SQL: ACTUALIZAR desde una selección compleja

En un escenario de sistema telefónico tengo 2 tablas.

La tabla 1 está compuesta por:customer_id, call_duration, calldate, skip_billing .table2 está compuesto por:customer_id, bonus_seconds.

table1 almacena todas las llamadas para todos los clientes y table2 almacena los bonus_seconds que representan el tiempo de conversación libre permitido para un cliente definido (es decir: para el cliente 1, los PRIMEROS 40 segundos acumulativos son gratuitos).

Tengo que escribir una consulta para actualizar la tabla1 de acuerdo con la condición que se explica a continuación: establezca skip_billing dentro de las llamadas que se definen gratis en la tabla2.

Entonces, primero necesito agrupar por customer_id y luego iterar sobre las llamadas, incrementando una variable acumulativa (cumsec) sobre call_duration y estableciendo skip_billing en consecuencia.

El ejemplo de table1 es:

|sqlid |customer_id |billsec | skipbill|
|0     |1           |12      | 1       |<--need to set 1 due to cume=12 for customer_id=1
|1     |1           |10      | 1       |<--need to set 1 due to cume=22 for customer_id=1
|2     |1           |15      | 1       |<--need to set 1 due to cume=37 for customer_id=1
|3     |1           |8       | 0       |<--nop(no operation) due to cume=45
|4     |2           |12      | 1       |<--need to set 1 due to cume=12 for customer_id=2
|5     |3           |12      | 1       |<--need to set 1 due to cume=12 for customer_id=3
|6     |2           |12      | 0       |<--nop due to cume=24 for customer_id=2
|7     |1           |12      | 0       |<--nop due to cume=49 for customer_id=1
|8     |3           |15      | 0       |<--nop due to cumsec=27 for customer_id=3

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

Intenté con una consulta como esta (gracias a Gordon Linoff) que devuelve el conjunto correcto de filas:

    SELECT t.cume, t.calldate, t.customer_id FROM (SELECT t.*, (@cume := @cume + billsec) AS cume FROM table1 t CROSS JOIN (SELECT @cume := 0) vars ORDER BY calldate) t, table2 sct WHERE t.cume <= sct.bonus_seconds AND t.customer_id=sct.customer_id ;

Pero cuando intento usar dentro del comando ACTUALIZAR como a continuación, no funciona porque no coincide con nada.

    UPDATE table1 SET skipbill=1 WHERE sqlid=(SELECT t.sqlid FROM (SELECT t.*, (@cume := @cume + billsec) AS cume FROM table1 t CROSS JOIN (SELECT @cume := 0) vars ORDER BY calldate) t, table2 sct WHERE t.cume <= sct.bonus_seconds AND t.customer_id=sct.customer_id ) ;

¿Cómo puedo escribir la tarea de actualización usando esa consulta o algo mejor?

Gracias de antemano

Respuestas a la pregunta(2)

Su respuesta a la pregunta