質問編集履歴

2

クエリ例の追加

2016/07/28 02:46

投稿

th1209
th1209

スコア40

test CHANGED
File without changes
test CHANGED
@@ -165,3 +165,163 @@
165
165
  SQLに詳しい方、ビックデータに詳しい方etc...
166
166
 
167
167
  ご教授いただけますと幸いですb
168
+
169
+
170
+
171
+
172
+
173
+ # 20160728追記
174
+
175
+ * 一応、window関数とWHERE句を使って書くことはできました(以下になります)。
176
+
177
+ * まだ冗長なクエリなので、何かスマートな書き方をご存知な方がいれば、教えていただけますと幸いです...b
178
+
179
+
180
+
181
+ ```sql
182
+
183
+ -- 日別プラットフォーム別に、課金したユーザの一覧を取る
184
+
185
+ WITH sub1 AS
186
+
187
+ (
188
+
189
+ SELECT
190
+
191
+ TD_TIME_FORMAT(time,'yyyy-MM-dd','JST') AS date
192
+
193
+ ,{platform}
194
+
195
+ ,user_id
196
+
197
+ FROM
198
+
199
+ kpi_table
200
+
201
+ WHERE
202
+
203
+ --月初め〜月末まで取る
204
+
205
+ TD_TIME_RANGE(
206
+
207
+ time
208
+
209
+ ,TD_TIME_FORMAT({month_start},'yyyy-MM-dd 00:00:00','JST')
210
+
211
+ ,TD_TIME_FORMAT({month_last},'yyyy-MM-dd 23:59:59','JST')
212
+
213
+ ,'JST'
214
+
215
+ )
216
+
217
+ --課金したユーザのみ
218
+
219
+ AND (purchase_amount > 0)
220
+
221
+ GROUP BY
222
+
223
+ TD_TIME_FORMAT(time,'yyyy-MM-dd','JST')
224
+
225
+ ,{platform}
226
+
227
+ ,user_id
228
+
229
+ ORDER BY
230
+
231
+ TD_TIME_FORMAT(time,'yyyy-MM-dd','JST') ASC
232
+
233
+ ,{platform} ASC
234
+
235
+ ,user_id
236
+
237
+ )
238
+
239
+ -- ユーザ毎のログイン日を集計
240
+
241
+ , sub2 AS
242
+
243
+ (
244
+
245
+ SELECT
246
+
247
+ date
248
+
249
+ ,{platform}
250
+
251
+ ,user_id
252
+
253
+ ,COUNT(user_id) OVER (PARTITION BY {platform}, user_id ORDER BY date) AS login_count
254
+
255
+ FROM
256
+
257
+ sub1
258
+
259
+ ORDER BY
260
+
261
+ date ASC
262
+
263
+ ,{platform} ASC
264
+
265
+ ,user_id
266
+
267
+ )
268
+
269
+ -- 全ユーザのログイン日を集計
270
+
271
+ , sub3 AS
272
+
273
+ (
274
+
275
+ SELECT
276
+
277
+ date
278
+
279
+ ,{platform}
280
+
281
+ ,COUNT(user_id) OVER (PARTITION BY platform ORDER BY date) user_num
282
+
283
+ FROM
284
+
285
+ sub2
286
+
287
+ --最初にログインした日以外のデータは排除
288
+
289
+ WHERE
290
+
291
+ login_count = 1
292
+
293
+ ORDER BY
294
+
295
+ date ASC
296
+
297
+ ,{platform} ASC
298
+
299
+ )
300
+
301
+ -- データを日別 * プラットフォーム別に絞る
302
+
303
+ SELECT
304
+
305
+ date
306
+
307
+ ,{platform}
308
+
309
+ MAX(user_num) AS user_num
310
+
311
+ FROM
312
+
313
+ sub3
314
+
315
+ GROUP BY
316
+
317
+ date
318
+
319
+ ,{platform}
320
+
321
+ ORDER BY
322
+
323
+ date ASC
324
+
325
+ ,{platform} ASC
326
+
327
+ ```

1

GROUP BY内の抜けを修正しました

2016/07/28 02:46

投稿

th1209
th1209

スコア40

test CHANGED
File without changes
test CHANGED
@@ -92,6 +92,8 @@
92
92
 
93
93
  ,{platform}
94
94
 
95
+ ,user_id
96
+
95
97
  ORDER BY
96
98
 
97
99
  TD_TIME_FORMAT(time,'yyyy-MM-dd','JST') ASC