From 32bebc800d690e09bccd17d9d96a88235f717d2d Mon Sep 17 00:00:00 2001 From: haoqiyue <1293971940@qq.com> Date: Thu, 23 Feb 2023 14:48:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=98=E8=B4=B9=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=95=99=E5=AD=98sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/behavior_analysis.py | 74 ++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/models/behavior_analysis.py b/models/behavior_analysis.py index 475912f..341ff45 100644 --- a/models/behavior_analysis.py +++ b/models/behavior_analysis.py @@ -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,