gpt4 book ai didi

mysql - 根据前一行组合值更新数据

转载 作者:行者123 更新时间:2023-11-29 00:25:52 25 4
gpt4 key购买 nike

我有一个具有以下结构的 MySQL 表:

身份证CatLevel1 CatLevel2 CatLevel3 ... CatLevel6 AcctLevel1 AcctLevel2 ... AcctLevel6(CatLevel 有 6 列,从 1 到 6)和 AcctLevel 有 6 列,从 1 到 6)。

从 AcctlLevel1 开始,我需要按照以下方式根据在 Catelevel 字段中找到的值更新它:

在 CatLevel1 上开始迭代。 AcctLevel1 的初始值 -> 01。如果 CatLevel1 Row(n) <> CatLevel1 Row(n-1) 则 AcctLevel1 -> 02。这意味着每次在 CatLevel1 中找到新值(与上一行不匹配)时,将 AcctLevel1 增加 1,同时为小于 10 的值添加前导零。

迭代 CatLevel1 中的最后一行后,从 CatLevel2 开始并以相同的方式遍历它。

我想知道该走哪条路,是将它分解成更小的部分并用 PHP 编码,还是在 MySQL 中以某种排序或递归方式全部完成?

你们中的许多人会认为我是在寻求解决方案,但我实际上是在寻求一些让我开始的想法,因为我对如何去做有点困惑。

最佳答案

根据您的要求,我提供了以下内容。

  • 第一个更新进行必要的重置。
  • 第二个导致 AcctLevel1 每当前一行发生变化时为 1。
  • 第三次更新总结了这些 1 以创建最终结果。

数据:

create table data
(
id int,
CatLevel1 varchar(5),
AcctLevel1 varchar(5)
);

insert into data values (0,'1','0');
insert into data values (1,'2','0');
insert into data values (2,'1','1');
insert into data values (3,'2','1');
insert into data values (4,'2','1');

SQL 命令:

UPDATE `data` t1 SET AcctLevel1 = 0;

update `data` t1
left outer JOIN `data` t2
on t1.id-1 = t2.id
set t1.AcctLevel1 =
case when t1.CatLevel1 = t2.CatLevel1 then t1.AcctLevel1
else t2.AcctLevel1+1 end;

update `data` t1
set t1.AcctLevel1 =
( select SUM(TEMP.AcctLevel1) from (SELECT *FROM `data`) AS TEMP where TEMP.ID <= t1.ID );

更新:最终玩具查询

UPDATE `data` t4
SET AcctLevel1 =
(
SELECT CASE WHEN TEMP.SCHANGES IS NULL THEN 0 ELSE TEMP.SCHANGES END from
(SELECT T3.ID,
(SELECT SUM(CASE WHEN t1.CatLevel1 = t2.CatLevel1 THEN 0 ELSE 1 END) AS SUM_CHANGES
FROM `data` t1,
`data` t2
WHERE t1.id-1 = t2.id
AND t1.ID <= t3.ID) AS SCHANGES
FROM `DATA` t3 ) as TEMP where TEMP.ID = T4.ID
);

最终 JSFiddle: http://sqlfiddle.com/#!2/325f16/2

关于mysql - 根据前一行组合值更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com