質問編集履歴

6

条件を詳しくした

2015/07/28 23:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,15 @@
2
2
 
3
3
 
4
4
 
5
-
5
+ ■抽出したいもの
6
-
6
+
7
- 来社した人の回数と期間で、よく来社した人を上位から抽出したくて、
7
+ 1.来社した人の回数と期間で、よく来社した人を
8
+
9
+ 2.「1.」の人をTableAのcustomer_idでユニークに、
10
+
11
+ を上位から抽出したい。
12
+
13
+
8
14
 
9
15
 
10
16
 

5

SQL文つくったけど0件

2015/07/28 23:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -151,3 +151,105 @@
151
151
 
152
152
 
153
153
  ==========================================================
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+ 追記:2015/07/28 21:30
166
+
167
+ =========================================
168
+
169
+ 作ったけど、抽出件数が、常に0件のSQL文。
170
+
171
+
172
+
173
+ 関数に与える引数 ⇒ iParaCompany_id
174
+
175
+
176
+
177
+
178
+
179
+ String strSQL =
180
+
181
+ // 2週間に5回以上来た人
182
+
183
+ "SELECT TableA.*, TableB.*"
184
+
185
+ + " FROM TableA"
186
+
187
+ + " JOIN ("
188
+
189
+ + " SELECT"
190
+
191
+ + " COUNT(*) AS CNT" // 来た回数
192
+
193
+ + ", '2週間に5回以上'"
194
+
195
+ + " FROM TableB"
196
+
197
+ + " WHERE TableB.date > DATE_ADD(CURRENT_DATE() , INTERVAL -2 WEEK)"
198
+
199
+ + " GROUP BY"
200
+
201
+ + " HAVING SUM(count) >= 5"
202
+
203
+ // 2ヶ月に8回以上来た人
204
+
205
+ + " UNION ALL"
206
+
207
+ + " SELECT"
208
+
209
+ + " COUNT(*) AS CNT" // 来た回数
210
+
211
+ + ", '2か月に8回以上'"
212
+
213
+ + " FROM TableB"
214
+
215
+ + " WHERE TableB.date > DATE_ADD(CURRENT_DATE() , INTERVAL -2 MONTH)"
216
+
217
+ + " GROUP BY"
218
+
219
+ + " HAVING SUM(count) >= 8"
220
+
221
+ // 半年に5回以上
222
+
223
+ + " UNION ALL"
224
+
225
+ + " SELECT"
226
+
227
+ + " COUNT(*) AS CNT" // 来た回数
228
+
229
+ + ", '半年に5回以上'"
230
+
231
+ + " FROM TableB"
232
+
233
+ + " WHERE TableB.date > DATE_ADD(CURRENT_DATE() , INTERVAL -6 MONTH)"
234
+
235
+ + " GROUP BY"
236
+
237
+ + " HAVING SUM(count) >= 5"
238
+
239
+ + ") TableB"
240
+
241
+ + " ON TableB.TableA_id = TableA.TableA_id"
242
+
243
+ + " WHERE"
244
+
245
+ + " (TableB.company_id = " + iParaCompany_id + ")" // 会社ID
246
+
247
+ + " AND (TableB.delete_flag = false)"
248
+
249
+ + " AND (TableA.delete_flag = false)"
250
+
251
+ + " ODER BY"
252
+
253
+ + " CNT DESC";
254
+
255
+ =========================================

4

テーブル構造追加

2015/07/28 12:29

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -77,3 +77,77 @@
77
77
 
78
78
 
79
79
  ==================================
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+ テーブル構造
88
+
89
+ ==========================================================
90
+
91
+ ■TableA : お客様情報
92
+
93
+
94
+
95
+ primary key
96
+
97
+
98
+
99
+ customer_id company_id name tel address ・・・・・
100
+
101
+ 1 1 山田 090-~ 東京都港区
102
+
103
+ 2 1 沢田 03-~ 東京都千代田区
104
+
105
+ 3 1 菊池 03-~ 東京都中央区
106
+
107
+ 4 2 鈴木 03-~ 東京都渋谷区
108
+
109
+ 5 2 小林 03-~ 東京都目黒区
110
+
111
+ : : : : :
112
+
113
+
114
+
115
+ ----------------------------------------------------------
116
+
117
+
118
+
119
+
120
+
121
+ TableAとTableBは、customer_idとcompany_idで紐付けできるが、複数一致。
122
+
123
+
124
+
125
+
126
+
127
+ ■TableB : お客様の来社記録
128
+
129
+
130
+
131
+ primary key
132
+
133
+
134
+
135
+ resertaion_id customer_id company_id date memo ・・・・・
136
+
137
+ 1 1 1 2015-07-01 見積もり
138
+
139
+ 2 1 1 2015-07-07 下見
140
+
141
+ 3 1 1 2013-12-31 名刺交換
142
+
143
+ 4 2 1 2015-07-28 プレゼント
144
+
145
+ 5 2 4 2015-01-01 宝くじキャンペーン
146
+
147
+ 6 2 4 2013-12-31 大晦日祭り
148
+
149
+ : : : : :
150
+
151
+
152
+
153
+ ==========================================================

3

整形した

2015/07/28 12:06

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -18,13 +18,17 @@
18
18
 
19
19
 
20
20
 
21
- ※テーブルは、2つで、TableBに日付と来た数だけのレコードを保持しています。
21
+ ※テーブルは、2つで、
22
22
 
23
+ ・TableBは、日付と来た人と、来た回数分だけのレコードを保持しています。
24
+
23
- テーブルAは、人の名前や住所などが入っています。
25
+ ・TableAは、人の名前や住所などが入っています。
24
26
 
25
27
 
26
28
 
29
+ ※TableBには、多数の人のレコードが入っており、
30
+
27
- ※TableBには、多数の人のレコードが入っており、Aさんの場合だと、Aさんが来た数だけレコード数が入っています。
31
+ Aさんの場合だと、Aさんが来た数だけレコード数が入っています。
28
32
 
29
33
 
30
34
 

2

追記

2015/07/28 08:34

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -21,6 +21,10 @@
21
21
  ※テーブルは、2つで、TableBに日付と来た数だけのレコードを保持しています。
22
22
 
23
23
  テーブルAは、人の名前や住所などが入っています。
24
+
25
+
26
+
27
+ ※TableBには、多数の人のレコードが入っており、Aさんの場合だと、Aさんが来た数だけレコード数が入っています。
24
28
 
25
29
 
26
30
 

1

AND

2015/07/28 08:26

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -32,9 +32,9 @@
32
32
 
33
33
  (TableA.index == TableB.index)
34
34
 
35
- && (TableA.name == TableB.name)
35
+ AND (TableA.name == TableB.name)
36
36
 
37
- && (TableB.delete_flag == false)
37
+ AND (TableB.delete_flag == false)
38
38
 
39
39
  WHERE
40
40