回答編集履歴

5

変更

2017/02/21 23:12

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -88,9 +88,21 @@
88
88
 
89
89
  一度には無理そうなのでまずは+2しなくても良い2個以上対応バージョンです。
90
90
 
91
- shouhin_tableには数個の商品が有り、IDが並んでいるを前提としています。さらにshouhin_table自身に展開します。
91
+ ・前提
92
92
 
93
+ shouhin_tableには数個の商品が有り、IDが並んでいるを前提としています。さらにshouhin_table自身に展開します。
93
94
 
95
+ ・概要
96
+
97
+ shouhin_tableに有るレコードを100倍して、更に日付倍しています。
98
+
99
+ RECURSIVEを使いcreated日付が指定日になるまでループし追加しています。
100
+
101
+ GENERATE_SERIES(0,99)によりcategoryの1~100を作成しています。
102
+
103
+ インサート前にshouhin_tableを全件削除しています。
104
+
105
+ 念のためcategoryが'0100'以上をインサート対象外としています。
94
106
 
95
107
  ```sql
96
108
 
@@ -108,7 +120,7 @@
108
120
 
109
121
  ), q AS (delete from shouhin_table returning *)
110
122
 
111
- INSERT INTO shouhin_table SELECT ROW_NUMBER() OVER (), item_cd, category, name, created FROM r
123
+ INSERT INTO shouhin_table SELECT ROW_NUMBER() OVER (), item_cd, category, name, created FROM r where category::int<=100
112
124
 
113
125
  ;
114
126
 

4

変更

2017/02/21 23:11

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -86,9 +86,11 @@
86
86
 
87
87
 
88
88
 
89
- 一度には無理そうなのでまずは+2しなくても良いバージョン
89
+ 一度には無理そうなのでまずは+2しなくても良い2個以上対応バージョンです。
90
90
 
91
- ・shouhin_tableには数個の商品がりIDが並んでいる場合でshouhin_table自身に展開す
91
+ ・shouhin_tableには数個の商品がIDが並んでいるを前提としています。さらにshouhin_table自身に展開します。
92
+
93
+
92
94
 
93
95
  ```sql
94
96
 
@@ -112,6 +114,8 @@
112
114
 
113
115
  ```
114
116
 
117
+ ※テーブルqを作成していますが、後でINSERT時に使う予定
115
118
 
116
119
 
117
120
 
121
+

3

追加

2017/02/21 22:34

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -85,3 +85,33 @@
85
85
  ```
86
86
 
87
87
 
88
+
89
+ 一度には無理そうなのでまずは+2しなくても良いバージョン
90
+
91
+ ・shouhin_tableには数個の商品がありIDが並んでいる場合でshouhin_table自身に展開する。
92
+
93
+ ```sql
94
+
95
+ WITH RECURSIVE r AS (
96
+
97
+ SELECT * FROM (
98
+
99
+ SELECT id,item_cd,to_char(category::int+n,'0000') category,name,created from shouhin_table,
100
+
101
+ GENERATE_SERIES(0,99) n) t1
102
+
103
+ UNION ALL
104
+
105
+ SELECT id, item_cd,category,name,created + '1 day' FROM r WHERE created::date < '2020/03/31'
106
+
107
+ ), q AS (delete from shouhin_table returning *)
108
+
109
+ INSERT INTO shouhin_table SELECT ROW_NUMBER() OVER (), item_cd, category, name, created FROM r
110
+
111
+ ;
112
+
113
+ ```
114
+
115
+
116
+
117
+

2

変更

2017/02/21 16:07

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -53,3 +53,35 @@
53
53
 
54
54
 
55
55
  ```
56
+
57
+
58
+
59
+ 読込が足りず失礼いたしました。(変更)
60
+
61
+ ```sql
62
+
63
+ INSERT INTO shouhin_table
64
+
65
+ SELECT ROW_NUMBER() OVER (), item_cd, category, name, created FROM (
66
+
67
+ WITH RECURSIVE r AS (
68
+
69
+ SELECT * FROM (
70
+
71
+ SELECT id,item_cd,to_char(category::int+n,'0000') category,name,created from table_t, GENERATE_SERIES(0,99) n
72
+
73
+ ) t1 WHERE id in (1,2)
74
+
75
+ UNION ALL
76
+
77
+ SELECT id, item_cd,category,name,created + '1 day' FROM r WHERE created::date < '2020/03/31'
78
+
79
+ )
80
+
81
+ SELECT * FROM r
82
+
83
+ ) tx where category::int<=100;
84
+
85
+ ```
86
+
87
+

1

変更

2017/02/21 10:31

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -44,9 +44,11 @@
44
44
 
45
45
 
46
46
 
47
- インサートす場合
47
+ categoryが'0100'になまででしたので調整
48
48
 
49
- insert into hoge_tbl select * from (WITH ..... SELECT * FROM r) tx;
49
+ insert into hoge_tbl select * from (WITH ..... SELECT * FROM r) tx where category::int<=100;
50
+
51
+
50
52
 
51
53
 
52
54