MySQL Workbench:检查2行数据后插入行,循环整个table
MySQL Workbench: Insert rows after checking data in 2 rows, loop on whole table
我有一个本地 MySQL 服务器实例和大学主题的 MySQL Workbench。
以下 table apjournal 包含工作站的开始和结束时间。
- PAID为生产订单,
- 扫描开始时间时的运行编号
我想在每个工作站之后插入 transportation/buffer 时间的行。
条件:
(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();
构建程序、匹配 2 行的问题对我来说是新的。该过程应遍历整个 table.
我认为这个任务可以用类似于
的一个查询来解决
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 */
但是当前的问题文本不允许定义需要什么额外的加入和过滤条件。
我有一个本地 MySQL 服务器实例和大学主题的 MySQL Workbench。
以下 table apjournal 包含工作站的开始和结束时间。
- PAID为生产订单,
- 扫描开始时间时的运行编号
我想在每个工作站之后插入 transportation/buffer 时间的行。
条件:
(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();
构建程序、匹配 2 行的问题对我来说是新的。该过程应遍历整个 table.
我认为这个任务可以用类似于
的一个查询来解决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 */
但是当前的问题文本不允许定义需要什么额外的加入和过滤条件。