gpt4 book ai didi

mysql - SQL:从复杂的选择中更新

转载 作者:行者123 更新时间:2023-11-29 07:46:55 26 4
gpt4 key购买 nike

在电话系统场景中,我有 2 个表。

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

表1存储所有客户的所有调用,表2存储bonus_seconds,它表示定义的客户允许的免费通话时间(即:对于客户1,前40累计秒是免费的)。

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

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

表1示例是:

|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 |

我尝试使用这样的查询(感谢 Gordon Linoff),它返回正确的行集:

    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 ;

但是当我尝试像下面的命令一样使用 UPDATE 时,它不起作用,因为不匹配任何内容。

    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 ) ;

如何使用该查询或更好的查询来编写更新任务?

提前谢谢

最佳答案

UPDATE table1 
SET skipbill = 1
WHERE sqlid IN (
SELECT DISTINCT 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
);

关于mysql - SQL:从复杂的选择中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com