【发布时间】:2021-06-07 09:35:14
【问题描述】:
假设我有一个名为 mytable 的表,它看起来像这样:
我希望能够更新 p6 列中添加到 39 的所有记录,但仅适用于具有不同 p2 值的行。换句话说,结果表应该如下所示:
我将 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
【问题讨论】:
-
请将您的数据发布为文本而非图像
-
已更新数据
标签: mysql sql sql-update mariadb