MariaDB - 根据另一列值更新具有常量的列

MariaDB - update column with constant depending on another column values

假设我有 table 命名为 mytable,它看起来像这样:

我希望能够更新 p6 列中的所有记录,添加到 39 但仅针对具有不同 p2[=40= 的行] 值。换句话说,结果 table 应该是这样的:

我将 p6 行涂成黄色以显示不应移动的位置,因为所有 p2 单元格都是灰色的,它们的值相同。 绿色 p6 行应该增长,因为 p2 也会增长,所以我将 +39 添加到所有行。示例中的最后 13 行再次为黄色,因为第 12 行的 p2 = 第 13 行的 p2

Gordon Linoff 的帮助下,我设法做到了这样的事情:

update mytable join
       (select mytable.*,
               (lag(p6) over(ORDER BY dt) +
                (case when lag(p2) over (order by dt) <> p2 then 39 ELSE 0 end)
               ) as new_p6
        from mytable
       ) tt
       on tt.id = mytable.id 
    set mytable.p6 = tt.new_p6
    where new_p6 <> mytable.p6;

但它没有按预期更新。你能帮我做吗?

更新数据:

id  dt  p2  p6
3   11.2.2021 15:45 536107.56   0
4   11.2.2021 15:50 536107.56   0
5   11.2.2021 15:55 536107.56   0
6   11.2.2021 16:00 536107.56   0
7   11.2.2021 16:05 536107.56   0
8   11.2.2021 16:10 609103.75   39
9   11.2.2021 16:15 609129.81   78
10  11.2.2021 16:20 609155.94   117
11  11.2.2021 16:25 609181.81   156
12  11.2.2021 16:30 609208.06   195
13  11.2.2021 16:35 609208.06   195

如果要枚举变化并乘以 39,则需要稍微不同的逻辑:

update mytable join
       (select tt.*,
               sum(case when p2 <> prev_p2 then 1 else 0 end) over (order by dt) as cnt
        from (select tt.*,
                     lag(p2) over (order by dt) as prev_p2
              from mytable tt
             ) tt
       ) tt
       on tt.id = mytable.id 
    set mytable.p6 = cnt * 39
    where cnt > 0;