优化付费设备留存sql

This commit is contained in:
haoqiyue 2023-02-23 14:48:17 +08:00
parent 9d1c279e94
commit 32bebc800d

View File

@ -1360,29 +1360,61 @@ ORDER BY values desc"""
keep_str = ','.join(keep)
cnt_str = ','.join(cnt)
sql = f"""
with '{event_name_a}' as start_event,
{event_name_b} as retuen_visit,
`{visit_name}` as visit,
'{self.start_date}' as start_data,
'{self.end_date}' as end_data,
toDate(addHours(`#event_time`, {self.zone_time})) as date
if "pay" in event_name_a and "distinct_id" in visit_name:
if "huixie" in self.game:
check_event = "new_device"
else:
check_event = "create_account"
sql = f"""
with '{event_name_a}' as start_event,
{event_name_b} as retuen_visit,
`{visit_name}` as visit,
'{self.start_date}' as start_data,
'{self.end_date}' as end_data,
toDate(addHours(`#event_time`, {self.zone_time})) as date
select reg_date,
cnt0 ,
{keep_str}
select reg_date,
cnt0 ,
{keep_str}
from(select p.reg_date, uniqExact(p.visit) as cnt0 from ( select date as reg_date,visit from {self.game}.event
where `#event_name` = start_event and addHours(`#event_time`, {self.zone_time}) >= start_data and addHours(`#event_time`, {self.zone_time}) <= end_data group by reg_date,visit ) p
inner join(SELECT date as reg_date,visit FROM {self.game}.event WHERE addHours({self.game}.event."#event_time", 8) >=start_data AND addHours({self.game}.event."#event_time", 8) <=end_data
AND {self.game}.event."#event_name" = '{check_event}' AND {self.game}.event.is_new_device = '1')d on p.visit = d.visit and p.reg_date = d.reg_date group by reg_date ) reg
left join
(select a.reg_date,
{cnt_str}
from (select p.* from ( select date as reg_date, visit from {self.game}.event where `#event_name` = start_event and addHours(`#event_time`, {self.zone_time}) >= start_data and addHours(`#event_time`, {self.zone_time}) <= end_data
group by reg_date, visit) p inner join (SELECT date as reg_date,visit FROM {self.game}.event WHERE addHours({self.game}.event."#event_time", 8) >=start_data AND addHours({self.game}.event."#event_time", 8) <=end_data
AND {self.game}.event."#event_name" = '{check_event}' AND {self.game}.event.is_new_device = '1') d on p.visit = d.visit and p.reg_date = d.reg_date) a
left join (select date as visit_date, visit from {self.game}.event where retuen_visit and addHours(`#event_time`, {self.zone_time}) >= start_data group by visit_date, visit) b on
a.visit = b.visit
group by a.reg_date) log on reg.reg_date=log.reg_date
"""
print(sql)
else:
sql = f"""
with '{event_name_a}' as start_event,
{event_name_b} as retuen_visit,
`{visit_name}` as visit,
'{self.start_date}' as start_data,
'{self.end_date}' as end_data,
toDate(addHours(`#event_time`, {self.zone_time})) as date
from(select date, uniqExact(visit) as cnt0 from {self.game}.event
where `#event_name` = start_event and addHours(`#event_time`, {self.zone_time}) >= start_data and addHours(`#event_time`, {self.zone_time}) <= end_data and {where_a}
group by date) reg left join
(select a.reg_date,
{cnt_str}
from (select date as reg_date, visit from {self.game}.event where `#event_name` = start_event and addHours(`#event_time`, {self.zone_time}) >= start_data and addHours(`#event_time`, {self.zone_time}) <= end_data and {where_a} group by reg_date, visit) a
left join (select date as visit_date, visit from {self.game}.event where retuen_visit and addHours(`#event_time`, {self.zone_time}) >= start_data group by visit_date, visit) b on
a.visit = b.visit
group by a.reg_date) log on reg.date=log.reg_date
"""
print(sql)
select reg_date,
cnt0 ,
{keep_str}
from(select date, uniqExact(visit) as cnt0 from {self.game}.event
where `#event_name` = start_event and addHours(`#event_time`, {self.zone_time}) >= start_data and addHours(`#event_time`, {self.zone_time}) <= end_data and {where_a}
group by date) reg left join
(select a.reg_date,
{cnt_str}
from (select date as reg_date, visit from {self.game}.event where `#event_name` = start_event and addHours(`#event_time`, {self.zone_time}) >= start_data and addHours(`#event_time`, {self.zone_time}) <= end_data and {where_a} group by reg_date, visit) a
left join (select date as visit_date, visit from {self.game}.event where retuen_visit and addHours(`#event_time`, {self.zone_time}) >= start_data group by visit_date, visit) b on
a.visit = b.visit
group by a.reg_date) log on reg.date=log.reg_date
"""
print(sql)
return {
'sql': sql,
'date_range': self.date_range,