SELECT grouptype,min(sum)/max(sum) as 'per',min(sum) as 'groupmin',max(sum) as 'groupmax',sum(sum) as 'groupsum',atime from
(
SELECT
devinfo as 'grouptype',
count( DISTINCT devid ) AS 'sum',
from_unixtime( atime, '%Y-%m-%d' ) AS atime
FROM
`all-impala-1700`
WHERE
devplatform = 'android' #事件所属平台
AND action IN ( 'fbLoginSucccessful') #第一个步骤对应的事件
AND from_unixtime( atime, '%Y-%m-%d' ) BETWEEN '2020-05-09' AND '2020-05-11' #统计时间范围
and devinfo in ('OPPO A1601','vivo vivo 1606','samsung SM-J111F')#统计最多四个分组
GROUP BY
from_unixtime( atime, '%Y-%m-%d' ),
grouptype
UNION ALL
SELECT a.grouptype,count( DISTINCT b.devid ) AS 'sum',a.atime from `all-impala-1700` b INNER JOIN
(
SELECT
action,
devid,
devinfo as 'grouptype',
count( DISTINCT devid ) AS 'sum',
max(FROM_UNIXTIME( atime )) AS 'maxdate',
from_unixtime( atime, '%Y-%m-%d' ) AS atime
FROM
`all-impala-1700`
WHERE
devplatform = 'android'
AND action IN ( 'fbLoginSucccessful') #第一个步骤对应的事件
and devinfo in ('OPPO A1601','vivo vivo 1606','samsung SM-J111F')#统计最多四个分组
AND from_unixtime( atime, '%Y-%m-%d' ) BETWEEN '2020-05-09' AND '2020-05-11' #统计时间范围
GROUP BY
action,
from_unixtime( atime, '%Y-%m-%d' ),
devid,
grouptype
) as a
on a.devid = b.devid
where b.action= 'entergame' #最后一个事件的事件名
and b.devplatform = 'android'#事件所属平台
and DATE_SUB(a.maxdate, INTERVAL -7 DAY) >= FROM_UNIXTIME(b.atime)#窗口期设置
and FROM_UNIXTIME(b.atime) >= '2020-05-09'#设置最后一个事件的起始日期
GROUP BY b.action,a.grouptype,a.atime
) as wzg
GROUP BY atime,grouptype
SELECT
cc.action,cc.grouptype,cc.sum/bb.sum as 'per'
FROM
(
SELECT
action,grouptype,sum
FROM
(
SELECT
1001 AS 'id',
action,
devinfo AS 'grouptype',#其他分组类型
count( DISTINCT devid ) AS 'sum' #from_unixtime( atime, '%Y-%m-%d' ) AS atime #按天统计的时候使用,累计趋势不需要该值
FROM
`all-impala-1700`
WHERE
devplatform = 'android' #事件所属平台
AND action IN ( 'fbLoginSucccessful' ) #第一个步骤对应的事件
AND devinfo IN ( 'OPPO A1601', 'vivo vivo 1606', 'samsung SM-J111F' ) #统计最多四个分组
AND from_unixtime( atime, '%Y-%m-%d' ) BETWEEN '2020-05-09'
AND '2020-05-11' #统计时间范围
GROUP BY
action,
grouptype
UNION ALL###用第一个步骤的事件,去查询第二步骤中的触发事件数和分组类型
SELECT
1002 AS 'id',
b.action,
a.grouptype,
count( DISTINCT b.devid ) AS 'sum'
FROM
`all-impala-1700` b
INNER JOIN (
SELECT
action,
devid,
devinfo AS 'grouptype',#其他分组类型
count( DISTINCT devid ) AS 'sum',
max(
FROM_UNIXTIME( atime )) AS 'maxdate'
FROM
`all-impala-1700`
WHERE
devplatform = 'android' #统计所属平台
AND action IN ( 'fbLoginSucccessful' ) #第一个步骤对应的事件
AND devinfo IN ( 'OPPO A1601', 'vivo vivo 1606', 'samsung SM-J111F' ) #统计最多四个分组
AND from_unixtime( atime, '%Y-%m-%d' ) BETWEEN '2020-05-09'
AND '2020-05-11' #统计时间范围
GROUP BY
action,
devid,
grouptype
) AS a ON a.devid = b.devid
WHERE
b.action = 'entergame' #第二个事件的名称
AND b.devplatform = 'android' #事件所属平台
AND DATE_SUB( a.maxdate, INTERVAL - 7 DAY ) >= FROM_UNIXTIME( b.atime ) #窗口期
AND FROM_UNIXTIME( b.atime ) >= '2020-05-09' #设置一个事件的起始日期(如果从第二步开始计算的话,在讨论))
GROUP BY
b.action,a.grouptype
) as wzg
) as cc
inner JOIN
(
SELECT
action,grouptype,sum
FROM
(
SELECT
1001 AS 'id',
action,
devinfo AS 'grouptype',#其他分组类型
count( DISTINCT devid ) AS 'sum' #from_unixtime( atime, '%Y-%m-%d' ) AS atime #按天统计的时候使用,累计趋势不需要该值
FROM
`all-impala-1700`
WHERE
devplatform = 'android' #事件所属平台
AND action IN ( 'fbLoginSucccessful' ) #第一个步骤对应的事件
AND devinfo IN ( 'OPPO A1601', 'vivo vivo 1606', 'samsung SM-J111F' ) #统计最多四个分组
AND from_unixtime( atime, '%Y-%m-%d' ) BETWEEN '2020-05-09'
AND '2020-05-11' #统计时间范围
GROUP BY
action,
grouptype
UNION ALL###用第一个步骤的事件,去查询第二步骤中的触发事件数和分组类型
SELECT
1002 AS 'id',
b.action,
a.grouptype,
count( DISTINCT b.devid ) AS 'sum'
FROM
`all-impala-1700` b
left JOIN (
SELECT
action,
devid,
devinfo AS 'grouptype',#其他分组类型
count( DISTINCT devid ) AS 'sum',
max(
FROM_UNIXTIME( atime )) AS 'maxdate'
FROM
`all-impala-1700`
WHERE
devplatform = 'android' #统计所属平台
AND action IN ( 'fbLoginSucccessful' ) #第一个步骤对应的事件
AND devinfo IN ( 'OPPO A1601', 'vivo vivo 1606', 'samsung SM-J111F' ) #统计最多四个分组
AND from_unixtime( atime, '%Y-%m-%d' ) BETWEEN '2020-05-09'
AND '2020-05-11' #统计时间范围
GROUP BY
action,
devid,
grouptype
) AS a ON a.devid = b.devid
WHERE
b.action = 'entergame' #第二个事件的名称
AND b.devplatform = 'android' #事件所属平台
AND DATE_SUB( a.maxdate, INTERVAL - 7 DAY ) >= FROM_UNIXTIME( b.atime ) #窗口期
AND FROM_UNIXTIME( b.atime ) >= '2020-05-09' #设置一个事件的起始日期(如果从第二步开始计算的话,在讨论))
GROUP BY
b.action,a.grouptype
) as wzg
where id = 1001
) as bb
ON cc.grouptype = bb.grouptype
order by action desc