回答編集履歴
10
追記
answer
CHANGED
@@ -157,4 +157,34 @@
|
|
157
157
|
select *
|
158
158
|
from before_formating
|
159
159
|
order by event_date asc
|
160
|
+
```
|
161
|
+
単にユーザーのIDをカウントするだけなので、シンプルになりそう。
|
162
|
+
```SQL
|
163
|
+
with T as (
|
164
|
+
select
|
165
|
+
date(event_date) event_date
|
166
|
+
, date(date_add(event_date,interval 7 day)) wau_range_date
|
167
|
+
, date(date_add(event_date,interval 1 month)) mau_range_date
|
168
|
+
, user_id
|
169
|
+
, event_name
|
170
|
+
from `sample*`
|
171
|
+
where (_TABLE_SUFFIX BETWEEN "20180707" AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)))
|
172
|
+
and app_info.install_source = 'iTunes'
|
173
|
+
and date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
|
174
|
+
and user_id is not null
|
175
|
+
limit 10000000
|
176
|
+
)
|
177
|
+
select
|
178
|
+
dau.event_date
|
179
|
+
, count(distinct(dau.user_id)) as dau_count
|
180
|
+
, count(distinct(wau.user_id)) as wau_count
|
181
|
+
, count(distinct(mau.user_id)) as mau_count
|
182
|
+
from T as dau
|
183
|
+
inner join T as wau
|
184
|
+
on dau.event_date between wau.event_date and wau.wau_range_date
|
185
|
+
inner join T as mau
|
186
|
+
on dau.event_date between mau.event_date and mau.wau_range_date
|
187
|
+
group by dau.event_date
|
188
|
+
order by dau.event_date asc
|
189
|
+
|
160
190
|
```
|
9
削除
answer
CHANGED
@@ -157,37 +157,4 @@
|
|
157
157
|
select *
|
158
158
|
from before_formating
|
159
159
|
order by event_date asc
|
160
|
-
```
|
161
|
-
もっとシンプルに
|
162
|
-
```SQL
|
163
|
-
with T as (
|
164
|
-
select
|
165
|
-
date(event_date) event_date
|
166
|
-
, date(date_add(event_date,interval 7 day)) wau_range_date
|
167
|
-
, date(date_add(event_date,interval 1 month)) mau_range_date
|
168
|
-
, user_id
|
169
|
-
, event_name
|
170
|
-
from `sample*`
|
171
|
-
where (_TABLE_SUFFIX BETWEEN "20180707" AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)))
|
172
|
-
and app_info.install_source = 'iTunes'
|
173
|
-
and date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
|
174
|
-
and user_id is not null
|
175
|
-
limit 10000000
|
176
|
-
)
|
177
|
-
, base_date as(
|
178
|
-
select event_date from T group by event_date
|
179
|
-
)
|
180
|
-
select
|
181
|
-
base_date.event_date
|
182
|
-
, count(distinct(dau.user_id)) as dau_count
|
183
|
-
, count(distinct(wau.user_id)) as wau_count
|
184
|
-
, count(distinct(mau.user_id)) as mau_count
|
185
|
-
from base_date inner join T as dau
|
186
|
-
on base_date.event_date = dau.event_date
|
187
|
-
inner join T as wau
|
188
|
-
on base_date.event_date between wau.event_date and wau.wau_range_date
|
189
|
-
inner join T as mau
|
190
|
-
on base_date.event_date between mau.event_date and mau.wau_range_date
|
191
|
-
group by base_date.event_date
|
192
|
-
order by base_date.event_date asc
|
193
160
|
```
|
8
修正
answer
CHANGED
@@ -183,11 +183,11 @@
|
|
183
183
|
, count(distinct(wau.user_id)) as wau_count
|
184
184
|
, count(distinct(mau.user_id)) as mau_count
|
185
185
|
from base_date inner join T as dau
|
186
|
-
|
186
|
+
on base_date.event_date = dau.event_date
|
187
|
-
|
187
|
+
inner join T as wau
|
188
|
-
|
188
|
+
on base_date.event_date between wau.event_date and wau.wau_range_date
|
189
|
-
|
189
|
+
inner join T as mau
|
190
|
-
|
190
|
+
on base_date.event_date between mau.event_date and mau.wau_range_date
|
191
191
|
group by base_date.event_date
|
192
192
|
order by base_date.event_date asc
|
193
193
|
```
|
7
追記
answer
CHANGED
@@ -157,4 +157,37 @@
|
|
157
157
|
select *
|
158
158
|
from before_formating
|
159
159
|
order by event_date asc
|
160
|
+
```
|
161
|
+
もっとシンプルに
|
162
|
+
```SQL
|
163
|
+
with T as (
|
164
|
+
select
|
165
|
+
date(event_date) event_date
|
166
|
+
, date(date_add(event_date,interval 7 day)) wau_range_date
|
167
|
+
, date(date_add(event_date,interval 1 month)) mau_range_date
|
168
|
+
, user_id
|
169
|
+
, event_name
|
170
|
+
from `sample*`
|
171
|
+
where (_TABLE_SUFFIX BETWEEN "20180707" AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)))
|
172
|
+
and app_info.install_source = 'iTunes'
|
173
|
+
and date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
|
174
|
+
and user_id is not null
|
175
|
+
limit 10000000
|
176
|
+
)
|
177
|
+
, base_date as(
|
178
|
+
select event_date from T group by event_date
|
179
|
+
)
|
180
|
+
select
|
181
|
+
base_date.event_date
|
182
|
+
, count(distinct(dau.user_id)) as dau_count
|
183
|
+
, count(distinct(wau.user_id)) as wau_count
|
184
|
+
, count(distinct(mau.user_id)) as mau_count
|
185
|
+
from base_date inner join T as dau
|
186
|
+
on base_date.event_date = dau.event_date
|
187
|
+
left join T as wau
|
188
|
+
on base_date.event_date between wau.event_date and wau.wau_range_date
|
189
|
+
left join T as mau
|
190
|
+
on base_date.event_date between mau.event_date and mau.wau_range_date
|
191
|
+
group by base_date.event_date
|
192
|
+
order by base_date.event_date asc
|
160
193
|
```
|
6
修正
answer
CHANGED
@@ -126,7 +126,7 @@
|
|
126
126
|
base_date.event_date
|
127
127
|
, count(distinct(T.user_id)) as wau_count
|
128
128
|
from base_date inner join T
|
129
|
-
on
|
129
|
+
on base_date.event_date between T.event_date and T.wau_range_date
|
130
130
|
group by base_date.event_date
|
131
131
|
)
|
132
132
|
, mau as (
|
@@ -134,7 +134,7 @@
|
|
134
134
|
base_date.event_date
|
135
135
|
, count(distinct(T.user_id)) as wau_count
|
136
136
|
from base_date inner join T
|
137
|
-
on
|
137
|
+
on base_date.event_date between T.event_date and T.mau_range_date
|
138
138
|
group by base_date.event_date
|
139
139
|
)
|
140
140
|
, before_formating as (
|
5
追記
answer
CHANGED
@@ -88,4 +88,73 @@
|
|
88
88
|
order by event_date asc
|
89
89
|
```
|
90
90
|
BigQueryでは相関問い合わせは使用しない方が良いみたいですね。
|
91
|
-
[BigQueryで相関サブクエリがうまく動かなかった話](http://silva-tech.hatenablog.com/entry/2018/04/14/233112)
|
91
|
+
[BigQueryで相関サブクエリがうまく動かなかった話](http://silva-tech.hatenablog.com/entry/2018/04/14/233112)
|
92
|
+
|
93
|
+
追記
|
94
|
+
--
|
95
|
+
予め、範囲となる日付を求めておくように修正
|
96
|
+
```SQL
|
97
|
+
with T as (
|
98
|
+
select
|
99
|
+
date(event_date) event_date
|
100
|
+
, date(date_add(event_date,interval 7 day)) wau_range_date
|
101
|
+
, date(date_add(event_date,interval 1 month)) mau_range_date
|
102
|
+
, user_id
|
103
|
+
, event_name
|
104
|
+
from `sample*`
|
105
|
+
where (_TABLE_SUFFIX BETWEEN "20180707" AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)))
|
106
|
+
and app_info.install_source = 'iTunes'
|
107
|
+
and date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
|
108
|
+
and user_id is not null
|
109
|
+
limit 10000000
|
110
|
+
)
|
111
|
+
, dau as (
|
112
|
+
select
|
113
|
+
event_date
|
114
|
+
,count(distinct(user_id)) as dau_count
|
115
|
+
from
|
116
|
+
T
|
117
|
+
group by
|
118
|
+
event_date
|
119
|
+
)
|
120
|
+
, base_date as(
|
121
|
+
select event_date from T group by event_date
|
122
|
+
)
|
123
|
+
|
124
|
+
, wau as (
|
125
|
+
select
|
126
|
+
base_date.event_date
|
127
|
+
, count(distinct(T.user_id)) as wau_count
|
128
|
+
from base_date inner join T
|
129
|
+
on T.event_date between base_date.event_date and wau_range_date
|
130
|
+
group by base_date.event_date
|
131
|
+
)
|
132
|
+
, mau as (
|
133
|
+
select
|
134
|
+
base_date.event_date
|
135
|
+
, count(distinct(T.user_id)) as wau_count
|
136
|
+
from base_date inner join T
|
137
|
+
on T.event_date between base_date.event_date and mau_range_date
|
138
|
+
group by base_date.event_date
|
139
|
+
)
|
140
|
+
, before_formating as (
|
141
|
+
select
|
142
|
+
dau.event_date
|
143
|
+
,dau_count
|
144
|
+
,wau_count
|
145
|
+
,mau_count
|
146
|
+
from
|
147
|
+
dau
|
148
|
+
left join
|
149
|
+
wau
|
150
|
+
on
|
151
|
+
dau.event_date = wau.event_date
|
152
|
+
left join
|
153
|
+
mau
|
154
|
+
on
|
155
|
+
dau.event_date = mau.event_date
|
156
|
+
)
|
157
|
+
select *
|
158
|
+
from before_formating
|
159
|
+
order by event_date asc
|
160
|
+
```
|
4
条件の日付の書式を合わせるように修正
answer
CHANGED
@@ -55,7 +55,7 @@
|
|
55
55
|
base_date.event_date
|
56
56
|
, count(distinct(T.user_id)) as wau_count
|
57
57
|
from base_date inner join T
|
58
|
-
on T.event_date between base_date.event_date and date_add(date base_date.event_date,interval 7 day)
|
58
|
+
on T.event_date between base_date.event_date and date(date_add(date base_date.event_date,interval 7 day))
|
59
59
|
group by base_date.event_date
|
60
60
|
)
|
61
61
|
, mau as (
|
@@ -63,7 +63,7 @@
|
|
63
63
|
base_date.event_date
|
64
64
|
, count(distinct(T.user_id)) as wau_count
|
65
65
|
from base_date inner join T
|
66
|
-
on T.event_date between base_date.event_date and date_add(date base_date.event_date,interval 1 month)
|
66
|
+
on T.event_date between base_date.event_date and date(date_add(date base_date.event_date,interval 1 month))
|
67
67
|
group by base_date.event_date
|
68
68
|
)
|
69
69
|
, before_formating as (
|
3
追記
answer
CHANGED
@@ -86,4 +86,6 @@
|
|
86
86
|
select *
|
87
87
|
from before_formating
|
88
88
|
order by event_date asc
|
89
|
-
```
|
89
|
+
```
|
90
|
+
BigQueryでは相関問い合わせは使用しない方が良いみたいですね。
|
91
|
+
[BigQueryで相関サブクエリがうまく動かなかった話](http://silva-tech.hatenablog.com/entry/2018/04/14/233112)
|
2
修正
answer
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
```SQL
|
20
20
|
with T as (
|
21
21
|
select
|
22
|
-
|
22
|
+
date(event_date) event_date
|
23
23
|
, user_id
|
24
24
|
, event_name
|
25
25
|
from
|
@@ -39,7 +39,7 @@
|
|
39
39
|
)
|
40
40
|
, dau as (
|
41
41
|
select
|
42
|
-
|
42
|
+
event_date
|
43
43
|
,count(distinct(user_id)) as dau_count
|
44
44
|
from
|
45
45
|
T
|
@@ -55,7 +55,7 @@
|
|
55
55
|
base_date.event_date
|
56
56
|
, count(distinct(T.user_id)) as wau_count
|
57
57
|
from base_date inner join T
|
58
|
-
on T.event_date between base_date.event_date and date_add(base_date.event_date,interval 7 day)
|
58
|
+
on T.event_date between base_date.event_date and date_add(date base_date.event_date,interval 7 day)
|
59
59
|
group by base_date.event_date
|
60
60
|
)
|
61
61
|
, mau as (
|
@@ -63,7 +63,7 @@
|
|
63
63
|
base_date.event_date
|
64
64
|
, count(distinct(T.user_id)) as wau_count
|
65
65
|
from base_date inner join T
|
66
|
-
on T.event_date between base_date.event_date and date_add(base_date.event_date,interval 1 month)
|
66
|
+
on T.event_date between base_date.event_date and date_add(date base_date.event_date,interval 1 month)
|
67
67
|
group by base_date.event_date
|
68
68
|
)
|
69
69
|
, before_formating as (
|
1
追記
answer
CHANGED
@@ -12,4 +12,78 @@
|
|
12
12
|
from T
|
13
13
|
group by event_date
|
14
14
|
) t1
|
15
|
+
```
|
16
|
+
追記
|
17
|
+
--
|
18
|
+
追加された記述より展開
|
19
|
+
```SQL
|
20
|
+
with T as (
|
21
|
+
select
|
22
|
+
parse_date("%Y%m%d", event_date) event_date
|
23
|
+
, user_id
|
24
|
+
, event_name
|
25
|
+
from
|
26
|
+
`sample*`
|
27
|
+
where(
|
28
|
+
_TABLE_SUFFIX BETWEEN
|
29
|
+
"20180707" AND
|
30
|
+
FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
|
31
|
+
)
|
32
|
+
and
|
33
|
+
app_info.install_source = 'iTunes'
|
34
|
+
and
|
35
|
+
date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
|
36
|
+
and
|
37
|
+
user_id is not null
|
38
|
+
limit 10000000
|
39
|
+
)
|
40
|
+
, dau as (
|
41
|
+
select
|
42
|
+
event_date
|
43
|
+
,count(distinct(user_id)) as dau_count
|
44
|
+
from
|
45
|
+
T
|
46
|
+
group by
|
47
|
+
event_date
|
48
|
+
)
|
49
|
+
, base_date as(
|
50
|
+
select event_date from T group by event_date
|
51
|
+
)
|
52
|
+
|
53
|
+
, wau as (
|
54
|
+
select
|
55
|
+
base_date.event_date
|
56
|
+
, count(distinct(T.user_id)) as wau_count
|
57
|
+
from base_date inner join T
|
58
|
+
on T.event_date between base_date.event_date and date_add(base_date.event_date,interval 7 day)
|
59
|
+
group by base_date.event_date
|
60
|
+
)
|
61
|
+
, mau as (
|
62
|
+
select
|
63
|
+
base_date.event_date
|
64
|
+
, count(distinct(T.user_id)) as wau_count
|
65
|
+
from base_date inner join T
|
66
|
+
on T.event_date between base_date.event_date and date_add(base_date.event_date,interval 1 month)
|
67
|
+
group by base_date.event_date
|
68
|
+
)
|
69
|
+
, before_formating as (
|
70
|
+
select
|
71
|
+
dau.event_date
|
72
|
+
,dau_count
|
73
|
+
,wau_count
|
74
|
+
,mau_count
|
75
|
+
from
|
76
|
+
dau
|
77
|
+
left join
|
78
|
+
wau
|
79
|
+
on
|
80
|
+
dau.event_date = wau.event_date
|
81
|
+
left join
|
82
|
+
mau
|
83
|
+
on
|
84
|
+
dau.event_date = mau.event_date
|
85
|
+
)
|
86
|
+
select *
|
87
|
+
from before_formating
|
88
|
+
order by event_date asc
|
15
89
|
```
|