温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - MySQL Workbench: Insert rows after checking data in 2 rows, loop on whole table
mysql mysql-workbench

其他 - MySQL Workbench:在检查2行数据后插入行,在整个表上循环

发布于 2021-03-16 14:39:12

我有一个本地MySQL Server实例和一个大学主题的MySQL Workbench。

下表apjournal包含工作站的开始时间和结束时间。

  • PAID是生产订单,
  • 扫描开始时间时标识运行编号

 Table上的

我想在每个工作站之后插入行作为运输/缓冲时间。

情况:

(r1 := row i, r2 := row i+1)

WHERE PAID_from_r1 = PAID _from_r1 AND ID_from_r2 > ID_from_r1

THEN 
INSERT INTO sys.apjournal (ID, PAID, RID, APID, APID_ST, Startzeit, Endzeit, DurationEvent) 
VALUES (0, PAID_from_r1, RID_from_r1, APID_from_r1, CONCAT('Puffer ',APID_from_r1), Endzeit_from r1, Startzeit_from_r2, 0);

我用正在运行的数字搜索了While循环以及过程和子查询。这是我的尝试。

SELECT
    -
    @ID := CASE
        WHEN @last_ID > data.actual_ID AND @last_PAID = data.acutal_PAID
        THEN @ID + 1            
        ELSE 0
    END AS ID,
    @last_ID := data.ID,
    @last_PAID := data.PAID
    #INSERT INTO sys.apjournal (ID, PAID, RID, APID, APID_ST, Startzeit, Endzeit, DurationEvent) VALUES (3000+i, 1, 1)
    -- //TODO: Weitere Felder ausgeben
FROM
    -- Die Variablen initialisieren
    (SELECT @nr:= 0, @last_ID:=1,@last_PAID:=76) AS vars,
    -- Die Daten sortieren
    (
        SELECT t.*
        FROM sys.apjournal AS t
        ORDER BY PAID
    ) AS data;
    
    
#other strategy ?

drop procedure if exists addPuffer;

DELIMITER //  

CREATE PROCEDURE addPuffer(
StartID INT,
PAID Int
)   
BEGIN
DECLARE i INT DEFAULT 0; 
WHILE (i<2000)  DO
    INSERT INTO sys.apjournal (ID, PAID, RID, APID, APID_ST, Startzeit, Endzeit, DurationEvent) VALUES (3000+i, 1, 1);
    SET i = i+1;
END WHILE;
END;
//  
CALL addPuffer(); 

对我来说,构造程序,匹配两行的问题是新的。该过程应遍历整个表。

查看更多

提问者
ChrisB
被浏览
0
Akina 2020-11-19 16:13

我认为可以通过一个类似于以下内容的查询来解决任务

INSERT INTO sys.apjournal (ID, PAID, RID, APID, APID_ST, Startzeit, Endzeit, DurationEvent) 
SELECT /* DISTINCT */ 0, t1.PAID, t1.RID, t1.APID, CONCAT('Puffer ', t1.APID), t1.Endzeit, t2.Startzeit, 0
FROM apjournal t1
JOIN apjournal t2 ON t1.PAID = t2.PAID 
                 AND t1.ID < t2.ID
             /*  AND another joining conditions */
/* WHERE one more conditions */

但是当前的问题文本不允许定义所需的附加连接和过滤条件。