DB2更新字段为等差数列

需求:
有时我们会想将数据库表中的某个字段更新为等差数列,N条数据为一组。

比如数据库中存储着许多轮询任务,其中有一列是轮询周期,为了避免同一时间大批量轮询任务同时执行,我们要将这些任务10个为一组,每组周期差值为质数。这里我们规定最小轮询周期为300秒,差值为7,我们可以直接用SQL来更新:

UPDATE (  
    SELECT   
        PT.*,  
        300 + FLOOR((ROW_NUMBER() OVER (ORDER BY ID) - 1) / 10) * 7 AS NEW_FREQUENCY 
    FROM POLLING_TASK PT
) PT  
SET PT.FREQUENCY = PT.NEW_FREQUENCY;

解释:
ROW_NUMBER() OVER (ORDER BY ID)
按照ID排序后生成行号(可以写成其他列名)

FLOOR
向下取整

通过这两个函数计算得到每10条数据为一组的编号,乘以7,再加上初始值300,就可以得到我们想要的轮询周期,并通过SELECT合并到要更新的表中作为新的一列,之后通过UPDATE将这一列赋值到想要更新的字段中

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值