質問編集履歴

3

SQL追記

2016/02/24 04:58

投稿

Satochan24
Satochan24

スコア113

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,71 @@
1
+ 【2016/2/24追記その2】
2
+
3
+ 以前、ここで新規ユーザ数を出してもらったSQLが下記のようにあり、このSQLと、先程の追記のSQLを
4
+
5
+ 結合できれば、できそうですが...苦戦しています。
6
+
7
+
8
+
9
+ 【毎月の新規ユーザのみ】
10
+
11
+ ```ここに言語を入力
12
+
13
+ SELECT (
14
+
15
+ a.access_month
16
+
17
+ ) AS access, b.newer_count AS newer
18
+
19
+ FROM (
20
+
21
+
22
+
23
+ SELECT access_month, count( * ) AS all_count
24
+
25
+ FROM (
26
+
27
+
28
+
29
+ SELECT DISTINCT user_id, date_format( access_day, '%Y年%m月' ) AS access_month
30
+
31
+ FROM access_record
32
+
33
+ WHERE access_type =101
34
+
35
+ ) AS c
36
+
37
+ GROUP BY access_month)a
38
+
39
+ LEFT JOIN (
40
+
41
+
42
+
43
+ SELECT access_month, count( * ) AS newer_count
44
+
45
+ FROM (
46
+
47
+
48
+
49
+ SELECT user_id, min( date_format( access_day, '%Y年%m月' ) ) access_month
50
+
51
+ FROM access_record
52
+
53
+ GROUP BY user_id
54
+
55
+ ) AS d
56
+
57
+ GROUP BY access_month)b ON a.access_month = b.access_month
58
+
59
+ ORDER BY `a`.`access_month` DESC
60
+
61
+ LIMIT 12
62
+
63
+ ```
64
+
65
+
66
+
67
+
68
+
1
69
  【2016/2/24追記】
2
70
 
3
71
  現在、下記のSQLまで作成し、最新月を先頭にし、1年間表示に絞り、完成に近い状態なのですが、
@@ -8,6 +76,10 @@
8
76
 
9
77
  何か方法ありますでしょうか?
10
78
 
79
+
80
+
81
+ 【累積の新規ユーザ数】
82
+
11
83
  ```ここに言語を入力
12
84
 
13
85
  SELECT date_format( M.last_date, '%Y年%m月' ) AS mon, count( * ) AS cnt
@@ -46,6 +118,8 @@
46
118
 
47
119
 
48
120
 
121
+ 【以下、元々の質問】
122
+
49
123
  アプリの新規の使用ユーザーを累積度数でグラフ化したいと
50
124
 
51
125
  思いまして、その値を取得するSQLを考えています。

2

途中までできているSQL公開

2016/02/24 04:58

投稿

Satochan24
Satochan24

スコア113

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,51 @@
1
+ 【2016/2/24追記】
2
+
3
+ 現在、下記のSQLまで作成し、最新月を先頭にし、1年間表示に絞り、完成に近い状態なのですが、
4
+
5
+ できれば、累積の新規ユーザ数の隣に、その月の新規ユーザ数も表示させたいと思います。
6
+
7
+ 別の表を結合するしかないかなぁと考えていますが…
8
+
9
+ 何か方法ありますでしょうか?
10
+
11
+ ```ここに言語を入力
12
+
13
+ SELECT date_format( M.last_date, '%Y年%m月' ) AS mon, count( * ) AS cnt
14
+
15
+ FROM (
16
+
17
+
18
+
19
+ SELECT DISTINCT last_day( access_day ) AS last_date
20
+
21
+ FROM access_record
22
+
23
+ ) AS M
24
+
25
+ JOIN (
26
+
27
+
28
+
29
+ SELECT user_id, min( access_day ) AS user_date
30
+
31
+ FROM access_record
32
+
33
+ GROUP BY user_id
34
+
35
+ ) AS U
36
+
37
+ WHERE M.last_date >= U.user_date
38
+
39
+ GROUP BY M.last_date
40
+
41
+ ORDER BY mon DESC
42
+
43
+ LIMIT 12
44
+
45
+ ```
46
+
47
+
48
+
1
49
  アプリの新規の使用ユーザーを累積度数でグラフ化したいと
2
50
 
3
51
  思いまして、その値を取得するSQLを考えています。

1

SQLが間違ってたため修正

2016/02/24 04:35

投稿

Satochan24
Satochan24

スコア113

test CHANGED
File without changes
test CHANGED
@@ -1,58 +1,84 @@
1
- アプリの使用ユーザーを累積度数でグラフ化したいと
1
+ アプリの新規の使用ユーザーを累積度数でグラフ化したいと
2
2
 
3
3
  思いまして、その値を取得するSQLを考えています。
4
4
 
5
+ 以下の通り、部分的には取得できています。
5
6
 
6
7
 
7
- アクセスタイプが101(メニューを開いたとき)にカウントしているので、
8
8
 
9
- 【全ユーザ数】
9
+ 【全新規ユーザ数】
10
10
 
11
11
  ```ここに言語を入力
12
12
 
13
- SELECT COUNT( DISTINCT user_id )
13
+ SELECT COUNT( * )
14
+
15
+ FROM (
16
+
17
+
18
+
19
+ SELECT user_id, min( date_format( access_day, '%Y-%m' ) ) access_month, access_day
14
20
 
15
21
  FROM access_record
16
22
 
17
- WHERE access_type =101
23
+ GROUP BY user_id
24
+
25
+ ) AS a
18
26
 
19
27
  ```
20
28
 
21
- また、今月の増加したユーザ数は、
29
+ また、今月の増加した新規ユーザ数は、
22
30
 
23
31
  ```ここに言語を入力
24
32
 
25
- SELECT COUNT( DISTINCT user_id )
33
+ SELECT COUNT( * )
34
+
35
+ FROM (
36
+
37
+
38
+
39
+ SELECT user_id, min( date_format( access_day, '%Y-%m' ) ) access_month, access_day
26
40
 
27
41
  FROM access_record
28
42
 
29
- WHERE access_type =101
43
+ GROUP BY user_id
30
44
 
31
- AND
45
+ ) AS a
32
46
 
33
- date_format( access_day , '%Y-%m' ) > date_format( DATE_SUB( NOW() , INTERVAL 1 MONTH ) , '%Y-%m' )
47
+ WHERE date_format( access_day, '%Y-%m' ) >= date_format( DATE_SUB( NOW( ) , INTERVAL 1
34
48
 
49
+ MONTH ) , '%Y-%m' )
50
+
35
- AND date_format( access_day , '%Y-%m' ) <= date_format( NOW() , '%Y-%m' )
51
+ AND date_format( access_day, '%Y-%m' ) < date_format( NOW( ) , '%Y-%m' )
36
52
 
37
53
  ```
38
54
 
39
55
 
40
56
 
41
- 先月増加したユーザ数は
57
+ 先月増加した新規ユーザ数は
42
58
 
43
59
  ```ここに言語を入力
44
60
 
45
- SELECT COUNT( DISTINCT user_id )
61
+ SELECT COUNT( * )
62
+
63
+ FROM (
64
+
65
+
66
+
67
+ SELECT user_id, min( date_format( access_day, '%Y-%m' ) ) access_month, access_day
46
68
 
47
69
  FROM access_record
48
70
 
49
- WHERE access_type =101
71
+ GROUP BY user_id
50
72
 
51
- AND
73
+ ) AS a
52
74
 
53
- date_format( access_day , '%Y-%m' ) > date_format( DATE_SUB( NOW() , INTERVAL 2 MONTH ) , '%Y-%m' )
75
+ WHERE date_format( access_day, '%Y-%m' ) >= date_format( DATE_SUB( NOW( ) , INTERVAL 2
54
76
 
77
+ MONTH ) , '%Y-%m' )
78
+
55
- AND date_format( access_day , '%Y-%m' ) <= date_format( DATE_SUB( NOW() , INTERVAL 1 MONTH ) , '%Y-%m' )
79
+ AND date_format( access_day, '%Y-%m' ) < date_format( DATE_SUB( NOW( ) , INTERVAL 1
80
+
81
+ MONTH ) , '%Y-%m' )
56
82
 
57
83
  ```
58
84