質問するログイン新規登録

質問編集履歴

1

実装した内容を追加しました。

2020/06/11 07:17

投稿

iiiiiiiikkkk
iiiiiiiikkkk

スコア6

title CHANGED
File without changes
body CHANGED
@@ -10,6 +10,44 @@
10
10
  ちなみに自分は以下のようなコードを上記の回答を見ながらwhile文で作成したいと考えています。
11
11
  今回は上記の質問への回答のMySQL版がわかればそれを見ながら自分で作業しようと考えています。そのため、自分のコードは一部抜粋で表示しています。
12
12
 
13
+ ###実装してみた結果
14
+ 回答いただいた内容をもとに実装しましたが、while文の中のselect文が実行されませんでした。
15
+ 1つのtemporary tableにデータを収めたい場合はどうすれば良いでしょうか?
16
+ ```MySQL
17
+ DROP TEMPORARY TABLE IF EXISTS tempo_table2;
18
+ DROP PROCEDURE IF EXISTS previous;
19
+ DELIMITER //
20
+ create procedure previous(in p_Limit int)
21
+ Begin
22
+ SET @sql1 := CONCAT("create temporary table tempo_table2",
23
+ ' select',
24
+ ' text_date',
25
+ ' ,cd_fromName',
26
+ ' ,cd_text',
27
+ ' ,command_content',
28
+ ' ,cd_text_action',
29
+ ' from tempo_table;');
30
+ prepare sql1 FROM @sql1;
31
+ Execute sql1;
32
+ Deallocate prepare sql1;
33
+ SET @CNT = 1;
34
+ while p_limit >= @CNT Do
35
+ Set @sql2 := CONCAT("select",
36
+ ' ,lag(cd_text_action,',@CNT,') over(order by cd_fromName,text_date) as previous_action',@CNT,
37
+ ' ,lag(cd_fromName,',@CNT,') over(order by cd_fromName,text_date) as previous_Name',@CNT,
38
+ ' from tempo_table;');
39
+ SET @CNT = @CNT + 1;
40
+ prepare sql2 FROM @sql2;
41
+ Execute sql2;
42
+ Deallocate prepare sql2;
43
+ End while;
44
+ End;
45
+ //
46
+ DELIMITER ;
47
+ call previous(20);
48
+ select * from tempo_table2;
49
+ ```
50
+
13
51
  ### 該当のソースコード
14
52
 
15
53
  lag(cd_text_action,1)
@@ -36,7 +74,6 @@
36
74
  when previous_action1 in("menu_cmd_01_01","menu_cmd_02_02") AND cd_fromName = previous_Name1 then 1
37
75
  when previous_action2 in("menu_cmd_01_01","menu_cmd_02_02") AND cd_fromName = previous_Name2 then 2
38
76
  ```
39
-
40
77
  ### 補足情報(FW/ツールのバージョンなど)
41
78
 
42
79
  MySQL 8.0