前提・実現したいこと
過去に質問され、回答されているコードをMySQLで実行できるように変更したいです。
EXECがMySQL 8.0では動かなかったり、SET QUOTED_IDENTIFIER OFFは存在しなかったりと所々違うので修正できないです。
詳しい方、お願いします。
過去の質問
自分の状況
ちなみに自分は以下のようなコードを上記の回答を見ながらwhile文で作成したいと考えています。
今回は上記の質問への回答のMySQL版がわかればそれを見ながら自分で作業しようと考えています。そのため、自分のコードは一部抜粋で表示しています。
###実装してみた結果
回答いただいた内容をもとに実装しましたが、while文の中のselect文が実行されませんでした。
1つのtemporary tableにデータを収めたい場合はどうすれば良いでしょうか?
MySQL
1DROP TEMPORARY TABLE IF EXISTS tempo_table2; 2DROP PROCEDURE IF EXISTS previous; 3DELIMITER // 4create procedure previous(in p_Limit int) 5Begin 6 SET @sql1 := CONCAT("create temporary table tempo_table2", 7 ' select', 8 ' text_date', 9 ' ,cd_fromName', 10 ' ,cd_text', 11 ' ,command_content', 12 ' ,cd_text_action', 13 ' from tempo_table;'); 14 prepare sql1 FROM @sql1; 15 Execute sql1; 16 Deallocate prepare sql1; 17 SET @CNT = 1; 18 while p_limit >= @CNT Do 19 Set @sql2 := CONCAT("select", 20 ' ,lag(cd_text_action,',@CNT,') over(order by cd_fromName,text_date) as previous_action',@CNT, 21 ' ,lag(cd_fromName,',@CNT,') over(order by cd_fromName,text_date) as previous_Name',@CNT, 22 ' from tempo_table;'); 23 SET @CNT = @CNT + 1; 24 prepare sql2 FROM @sql2; 25 Execute sql2; 26 Deallocate prepare sql2; 27 End while; 28End; 29// 30DELIMITER ; 31call previous(20); 32select * from tempo_table2;
該当のソースコード
lag(cd_text_action,1)
lag(cd_text_action,2)
lag(cd_text_action,3)
のように数字を1つずつ増やしながら、列の作成をしていきたいです。
MySQL
1create temporary table tempo_table2 2select 3 text_date, 4 cd_fromName, 5 cd_text, 6 command_content, 7 cd_text_action, 8 #過去に入力したactionをn回分保存する 9 lag(cd_text_action,1) over(order by cd_fromName,text_date) as previous_action1, 10 lag(cd_text_action,2) over(order by cd_fromName,text_date) as previous_action2,
こちらも同様にprevious_action1,previous_action2,previous_action3
と
then 1, then 2, then 3のように数字を一つずつ増やしていきたいです。
MySQL
1case 2 when previous_action1 in("menu_cmd_01_01","menu_cmd_02_02") AND cd_fromName = previous_Name1 then 1 3 when previous_action2 in("menu_cmd_01_01","menu_cmd_02_02") AND cd_fromName = previous_Name2 then 2
補足情報(FW/ツールのバージョンなど)
MySQL 8.0
回答2件
あなたの回答
tips
プレビュー