当前位置: 首页 > 知识库问答 >
问题:

MariaDB-根据其他列值使用常量更新列

龙洛城
2023-03-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

共有1个答案

常乐
2023-03-14

如果您想枚举更改并乘以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;
 类似资料:
  • 假设我有一个表customer(int id,类型varchar,首选项jsonb)。类型可以是、等。根据列类型值,首选项JSON结构将有所不同。 在从数据库加载客户记录时,如果type=regular我希望将其转换为对象类型,如果type=premium我希望将其转换为对象类型。 我已经阅读了几篇关于使用JOOQ JSON转换器/绑定的教程。但是它们是一对一映射,不是基于条件的(取决于另一个列值

  • 问题内容: 假设我有一个表 customer(int id,类型varchar,首选项jsonb) 。的 类型 可以是,基于该列类型值偏好JSON结构将是不同的等等。 从数据库加载客户记录时,如果 type = REGULAR, 我想将其转换为对象类型,如果 type = PREMIUM, 我想将其转换为对象类型。 我已经看过几本有关使用JOOQ JSON转换器/绑定的教程。但是它们是一对一的映射

  • 问题内容: 我有一个名为Vendor的表,在此表中有一个名为AccountTerms的列,该列仅显示一个值(即0、1、2、3),依此类推。我也有一个要使用()的列,以反映该值的含义,例如: 等等… 我需要的是一个脚本,它将查看AccountTerms中的值,然后将更新以显示上面显示的单词值。我该怎么做呢? 问题答案: 我将尝试以一种尽可能简单的方式来解释这一点,以便于理解: 假设您有一个这样的表设

  • 问题内容: 我在尝试制作自己的内容时遇到了麻烦,具体取决于其他方面的选择值。第一个的内容来自我的数据库中的一个表,并且运行良好,但是第二个的内容应该来自另一个表,但是我无法使其工作。这是我的,我只是在尝试证明其工作原理: 这是我的Bean部分,应该获取第二个菜单的内容: 我已经为此工作了好几个小时,但还是一无所获,我真的很着急,如果能在这里给我一些帮助,我将不胜感激。非常感谢您:D 问题答案: i

  • 问题内容: 我想申请我的自定义函数(它使用的梯)这六个列我的数据帧的每一行中)。 我尝试了与其他问题不同的方法,但似乎仍然找不到适合我问题的正确答案。关键在于,如果该人被视为西班牙裔,就不能被视为其他任何人。即使他们在另一个种族栏中的得分为“ 1”,他们仍然被视为西班牙裔,而不是两个或两个以上的种族。同样,如果所有ERI列的总和大于1,则将它们计为两个或多个种族,并且不能计为唯一的种族(西班牙裔除

  • 我正在寻找一种解决方案,使用Jackson基于同一POJO中的其他属性值序列化POJO对象属性 如果某个属性值符合某些条件,则应根据要求更改其他属性值 例如,下面是我的JSON对象: 在上述情况下,如果的值符合某些条件,那么我应该能够更改的值 为什么需要这样做: 是一个配置对象 和-是配置设置 在上面的例子中,中有一个是,我需要屏蔽/更改相应的 还要补充一点,在这个例子中,属性是和,但是如果我们找