【问题标题】:MariaDB - update all rows with value of the previous + constantMariaDB - 使用前一个 + 常量的值更新所有行
【发布时间】:2021-06-01 01:39:20
【问题描述】:

我有以下示例表:

我想让它以这种方式工作 - 我向每一行 p6 添加常量,但行随着 previos one + 常量的值而增长。 例如,如果我决定常量为 10,表应该如下所示:

UPDATE table t SET t.p6 = (SELECT t1.P6 FROM table t1 WHERE t1.id=t.id-1) + 10

但它使 id=1 的第一行的 p6 为 NULL,其余的不起作用。如何忽略具有正确值的第一行并仅更新以下内容?

【问题讨论】:

    标签: mysql sql sql-update mariadb


    【解决方案1】:

    一种方法使用join 和窗口函数:

    update t join
           (select t.*,
                   row_number() over (order by id) as seqnum,
                   first_value(p6) over (order by id) as first_p6
            from t
           ) tt
           on t.id = tt.id
        set p6 = (seqnum - 1) * 5 + first_p6
        where seqnum > 1;
    

    在旧版本中,您可以使用变量:

    set @p6 := 0;
    
    update t
        set p6 = (@p6 := (case when id = 1 then p6 else @p6 + 5 end))
        order by id;
    

    【讨论】:

    • 在行集 p6 = (seqnum - 1) * 5 + first_p6 你的意思可能是 +5 而不是 *5
    • 第二行加 5 但下一行只加 +1...
    猜你喜欢
    • 2021-06-08
    • 2021-06-07
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多