1with T as (
2 select
3 parse_date("%Y%m%d", event_date) event_date
4 , user_id
5 , event_name
6 from
7 `sample*`
8 where(
9 _TABLE_SUFFIX BETWEEN
10 "20180707" AND
11 FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
12 )
13 and
14 app_info.install_source = 'iTunes'
15 and
16 date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
17 and
18 user_id is not null
19)
2021,dau as (
22 select
23 event_date
24 ,count(distinct(user_id)) as dau_count
25 from
26 T
27 group by
28 event_date
29)
1with T as (
2 select
3 parse_date("%Y%m%d", event_date) event_date
4 , user_id
5 , event_name
6 from
7 `sample*`
8 where(
9 _TABLE_SUFFIX BETWEEN
10 "20180707" AND
11 FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
12 )
13 and
14 app_info.install_source = 'iTunes'
15 and
16 date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
17 and
18 user_id is not null
19 limit 10000000
20)
2122, dau as (
23 select
24 event_date
25 ,count(distinct(user_id)) as dau_count
26 from
27 T
28 group by
29 event_date
30)
3132, wau as (
33 select
34 event_date
35 ,count(distinct(user_id)) as wau_count
36 from
37 T
38 where
39 event_date between t.event_date and date_add(t.event_date,interval 7 day)
40 group by event_date
41)
4243, mau as (
44 select
45 event_date
46 ,count(distinct(user_id)) as mau_count
47 from
48 T
49 where
50 event_date between t.event_date and date_add(t.event_date,interval 1 month)
51 group by event_date
52)
5354, before_formating as (
55 select
56 dau.event_date
57 ,dau_count
58 ,wau_count
59 ,mau_count
60 from
61 dau
62 left join
63 wau
64 on
65 dau.event_date = wau.event_date
66 left join
67 mau
68 on
69 dau.event_date = mau.event_date
70)
71select *
72from before_formating
73order by event_date asc
1select event_date
2,(selectcount(distinct(user_id))from T
3where event_date between t1.event_date and DATE_ADD(t1.event_date,INTERVAL-7DAY))4)as wau_count
5,(selectcount(distinct(user_id))from T
6where event_date between t1.event_date and DATE_ADD(t1.event_date,INTERVAL-1MONTH))7)as mau_count
8from(9select event_date
10from T
11groupby event_date
12) t1
追記
追加された記述より展開
SQL
1with T as(2select3date(event_date) event_date
4, user_id
5, event_name
6from7`sample*`8where(9 _TABLE_SUFFIX BETWEEN10"20180707"AND11 FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(),INTERVAL1DAY))12)13and14 app_info.install_source ='iTunes'15and16date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp),interval device.time_zone_offset_seconds SECOND))>"2018-07-06"17and18 user_id isnotnull19limit1000000020)21, dau as(22select23 event_date
24,count(distinct(user_id))as dau_count
25from26 T
27groupby28 event_date
29)30, base_date as(31select event_date from T groupby event_date
32)3334, wau as(35select36 base_date.event_date
37,count(distinct(T.user_id))as wau_count
38from base_date innerjoin T
39on T.event_date between base_date.event_date anddate(date_add(date base_date.event_date,interval7day))40groupby base_date.event_date
41)42, mau as(43select44 base_date.event_date
45,count(distinct(T.user_id))as wau_count
46from base_date innerjoin T
47on T.event_date between base_date.event_date anddate(date_add(date base_date.event_date,interval1month))48groupby base_date.event_date
49)50, before_formating as(51select52 dau.event_date
53,dau_count
54,wau_count
55,mau_count
56from57 dau
58leftjoin59 wau
60on61 dau.event_date = wau.event_date
62leftjoin63 mau
64on65 dau.event_date = mau.event_date
66)67select*68from before_formating
69orderby event_date asc
1with T as(2select3date(event_date) event_date
4,date(date_add(event_date,interval7day)) wau_range_date
5,date(date_add(event_date,interval1month)) mau_range_date
6, user_id
7, event_name
8from`sample*`9where(_TABLE_SUFFIX BETWEEN"20180707"AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(),INTERVAL1DAY)))10and app_info.install_source ='iTunes'11anddate(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp),interval device.time_zone_offset_seconds SECOND))>"2018-07-06"12and user_id isnotnull13limit1000000014)15, dau as(16select17 event_date
18,count(distinct(user_id))as dau_count
19from20 T
21groupby22 event_date
23)24, base_date as(25select event_date from T groupby event_date
26)2728, wau as(29select30 base_date.event_date
31,count(distinct(T.user_id))as wau_count
32from base_date innerjoin T
33on base_date.event_date between T.event_date and T.wau_range_date
34groupby base_date.event_date
35)36, mau as(37select38 base_date.event_date
39,count(distinct(T.user_id))as wau_count
40from base_date innerjoin T
41on base_date.event_date between T.event_date and T.mau_range_date
42groupby base_date.event_date
43)44, before_formating as(45select46 dau.event_date
47,dau_count
48,wau_count
49,mau_count
50from51 dau
52leftjoin53 wau
54on55 dau.event_date = wau.event_date
56leftjoin57 mau
58on59 dau.event_date = mau.event_date
60)61select*62from before_formating
63orderby event_date asc
単にユーザーのIDをカウントするだけなので、シンプルになりそう。
SQL
1with T as(2select3date(event_date) event_date
4,date(date_add(event_date,interval7day)) wau_range_date
5,date(date_add(event_date,interval1month)) mau_range_date
6, user_id
7, event_name
8from`sample*`9where(_TABLE_SUFFIX BETWEEN"20180707"AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(),INTERVAL1DAY)))10and app_info.install_source ='iTunes'11anddate(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp),interval device.time_zone_offset_seconds SECOND))>"2018-07-06"12and user_id isnotnull13limit1000000014)15select16 dau.event_date
17,count(distinct(dau.user_id))as dau_count
18,count(distinct(wau.user_id))as wau_count
19,count(distinct(mau.user_id))as mau_count
20from T as dau
21innerjoin T as wau
22on dau.event_date between wau.event_date and wau.wau_range_date
23innerjoin T as mau
24on dau.event_date between mau.event_date and mau.wau_range_date
25groupby dau.event_date
26orderby dau.event_date asc27
```with T as (
select
parse_date("%Y%m%d", event_date) event_date
, user_id
, event_name
from
`sample*`
where(
_TABLE_SUFFIX BETWEEN
"20180707" AND
FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
)
and
app_info.install_source = 'iTunes'
and
date(TIMESTAMP_ADD(timestamp_micros(user_first_touch_timestamp), interval device.time_zone_offset_seconds SECOND)) > "2018-07-06"
and
user_id is not null
limit 10000000
)
, dau as (
select
event_date
,count(distinct(user_id)) as dau_count
from
T
group by
event_date
)
select
event_date
, (select count(distinct(user_id)) from T
where event_date between t1.event_date and DATE_ADD(t1.event_date, INTERVAL -7 DAY))
as wau_count
, (select count(distinct(user_id)) from T
where event_date between t1.event_date and DATE_ADD(t1.event_date, INTERVAL -1 MONTH))
as mau_count
from (
select event_date
from T
group by event_date
) t1```
このコードで試し、
Error running query: LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.
というエラーがでてきました…