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

質問編集履歴

3

SQL追記

2016/02/24 04:58

投稿

Satochan24
Satochan24

スコア114

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,44 @@
1
+ 【2016/2/24追記その2】
2
+ 以前、ここで新規ユーザ数を出してもらったSQLが下記のようにあり、このSQLと、先程の追記のSQLを
3
+ 結合できれば、できそうですが...苦戦しています。
4
+
5
+ 【毎月の新規ユーザのみ】
6
+ ```ここに言語を入力
7
+ SELECT (
8
+ a.access_month
9
+ ) AS access, b.newer_count AS newer
10
+ FROM (
11
+
12
+ SELECT access_month, count( * ) AS all_count
13
+ FROM (
14
+
15
+ SELECT DISTINCT user_id, date_format( access_day, '%Y年%m月' ) AS access_month
16
+ FROM access_record
17
+ WHERE access_type =101
18
+ ) AS c
19
+ GROUP BY access_month)a
20
+ LEFT JOIN (
21
+
22
+ SELECT access_month, count( * ) AS newer_count
23
+ FROM (
24
+
25
+ SELECT user_id, min( date_format( access_day, '%Y年%m月' ) ) access_month
26
+ FROM access_record
27
+ GROUP BY user_id
28
+ ) AS d
29
+ GROUP BY access_month)b ON a.access_month = b.access_month
30
+ ORDER BY `a`.`access_month` DESC
31
+ LIMIT 12
32
+ ```
33
+
34
+
1
35
  【2016/2/24追記】
2
36
  現在、下記のSQLまで作成し、最新月を先頭にし、1年間表示に絞り、完成に近い状態なのですが、
3
37
  できれば、累積の新規ユーザ数の隣に、その月の新規ユーザ数も表示させたいと思います。
4
38
  別の表を結合するしかないかなぁと考えていますが…
5
39
  何か方法ありますでしょうか?
40
+
41
+ 【累積の新規ユーザ数】
6
42
  ```ここに言語を入力
7
43
  SELECT date_format( M.last_date, '%Y年%m月' ) AS mon, count( * ) AS cnt
8
44
  FROM (
@@ -22,6 +58,7 @@
22
58
  LIMIT 12
23
59
  ```
24
60
 
61
+ 【以下、元々の質問】
25
62
  アプリの新規の使用ユーザーを累積度数でグラフ化したいと
26
63
  思いまして、その値を取得するSQLを考えています。
27
64
  以下の通り、部分的には取得できています。

2

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

2016/02/24 04:58

投稿

Satochan24
Satochan24

スコア114

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

1

SQLが間違ってたため修正

2016/02/24 04:35

投稿

Satochan24
Satochan24

スコア114

title CHANGED
File without changes
body CHANGED
@@ -1,31 +1,44 @@
1
- アプリの使用ユーザーを累積度数でグラフ化したいと
1
+ アプリの新規の使用ユーザーを累積度数でグラフ化したいと
2
2
  思いまして、その値を取得するSQLを考えています。
3
+ 以下の通り、部分的には取得できています。
3
4
 
4
- アクセスタイプが101(メニューを開いたとき)にカウントしているので、
5
- 【全ユーザ数】
5
+ 【全新規ユーザ数】
6
6
  ```ここに言語を入力
7
- SELECT COUNT( DISTINCT user_id )
7
+ SELECT COUNT( * )
8
+ FROM (
9
+
10
+ SELECT user_id, min( date_format( access_day, '%Y-%m' ) ) access_month, access_day
8
11
  FROM access_record
9
- WHERE access_type =101
12
+ GROUP BY user_id
13
+ ) AS a
10
14
  ```
11
- また、今月の増加したユーザ数は、
15
+ また、今月の増加した新規ユーザ数は、
12
16
  ```ここに言語を入力
13
- SELECT COUNT( DISTINCT user_id )
17
+ SELECT COUNT( * )
18
+ FROM (
19
+
20
+ SELECT user_id, min( date_format( access_day, '%Y-%m' ) ) access_month, access_day
14
21
  FROM access_record
15
- WHERE access_type =101
22
+ GROUP BY user_id
16
- AND
23
+ ) AS a
17
- date_format( access_day , '%Y-%m' ) > date_format( DATE_SUB( NOW() , INTERVAL 1 MONTH ) , '%Y-%m' )
24
+ WHERE date_format( access_day, '%Y-%m' ) >= date_format( DATE_SUB( NOW( ) , INTERVAL 1
25
+ MONTH ) , '%Y-%m' )
18
- AND date_format( access_day , '%Y-%m' ) <= date_format( NOW() , '%Y-%m' )
26
+ AND date_format( access_day, '%Y-%m' ) < date_format( NOW( ) , '%Y-%m' )
19
27
  ```
20
28
 
21
- 先月増加したユーザ数は
29
+ 先月増加した新規ユーザ数は
22
30
  ```ここに言語を入力
23
- SELECT COUNT( DISTINCT user_id )
31
+ SELECT COUNT( * )
32
+ FROM (
33
+
34
+ SELECT user_id, min( date_format( access_day, '%Y-%m' ) ) access_month, access_day
24
35
  FROM access_record
25
- WHERE access_type =101
36
+ GROUP BY user_id
26
- AND
37
+ ) AS a
27
- date_format( access_day , '%Y-%m' ) > date_format( DATE_SUB( NOW() , INTERVAL 2 MONTH ) , '%Y-%m' )
38
+ WHERE date_format( access_day, '%Y-%m' ) >= date_format( DATE_SUB( NOW( ) , INTERVAL 2
39
+ MONTH ) , '%Y-%m' )
28
- AND date_format( access_day , '%Y-%m' ) <= date_format( DATE_SUB( NOW() , INTERVAL 1 MONTH ) , '%Y-%m' )
40
+ AND date_format( access_day, '%Y-%m' ) < date_format( DATE_SUB( NOW( ) , INTERVAL 1
41
+ MONTH ) , '%Y-%m' )
29
42
  ```
30
43
 
31
44
  で得られました。あとは、変数に入れて引き算してやれば