@@ -62,25 +62,16 @@ async function relationalQuery(
6262 website_event.session_id,
6363 website_event.visit_id,
6464 website_event.hostname,
65- count(*) c,
66- min(website_event.created_at) min_time,
67- max(website_event.created_at) max_time
65+ website_event.event_id,
66+ website_event.created_at
6867 from website_event
6968 ${ cohortQuery }
7069 ${ excludeBounceQuery }
7170 ${ joinSessionQuery }
7271 where website_event.website_id = {{websiteId::uuid}}
7372 and website_event.event_type NOT IN (2, 5)
7473 ${ dateQuery }
75- ${ filterQuery }
76- group by prefix,
77- website_event.referrer_domain,
78- website_event.url_query,
79- website_event.utm_medium,
80- website_event.utm_source,
81- website_event.session_id,
82- website_event.visit_id,
83- website_event.hostname),
74+ ${ filterQuery } ),
8475
8576 channels as (
8677 select case
@@ -99,21 +90,50 @@ async function relationalQuery(
9990 else '' end as "name",
10091 session_id,
10192 visit_id,
102- c,
103- min_time,
104- max_time
105- from prefix)
93+ event_id,
94+ created_at
95+ from prefix),
96+
97+ visit_channels as (
98+ select
99+ session_id,
100+ visit_id,
101+ coalesce(nullif(name, ''), 'direct') as "name"
102+ from (
103+ select
104+ name,
105+ session_id,
106+ visit_id,
107+ row_number() over (
108+ partition by session_id, visit_id
109+ order by case when name != '' then 0 else 1 end, created_at, event_id
110+ ) as row_num
111+ from channels
112+ ) as ranked_channels
113+ where row_num = 1),
114+
115+ visit_stats as (
116+ select
117+ session_id,
118+ visit_id,
119+ count(*) as c,
120+ min(created_at) as min_time,
121+ max(created_at) as max_time
122+ from prefix
123+ group by session_id, visit_id)
106124
107125 select
108- name,
109- sum(c) as "pageviews",
110- count(distinct session_id) as "visitors",
111- count(distinct visit_id) as "visits",
112- sum(case when c = 1 then 1 else 0 end) as "bounces",
113- sum(${ getTimestampDiffSQL ( 'min_time' , 'max_time' ) } ) as "totaltime"
114- from channels
115- where name != ''
116- group by name
126+ visit_channels.name,
127+ sum(visit_stats.c) as "pageviews",
128+ count(distinct visit_stats.session_id) as "visitors",
129+ count(distinct visit_stats.visit_id) as "visits",
130+ sum(case when visit_stats.c = 1 then 1 else 0 end) as "bounces",
131+ sum(${ getTimestampDiffSQL ( 'visit_stats.min_time' , 'visit_stats.max_time' ) } ) as "totaltime"
132+ from visit_stats
133+ join visit_channels
134+ on visit_channels.session_id = visit_stats.session_id
135+ and visit_channels.visit_id = visit_stats.visit_id
136+ group by visit_channels.name
117137 order by visitors desc, visits desc
118138 ` ,
119139 queryParams ,
@@ -142,6 +162,14 @@ async function clickhouseQuery(
142162 sum(max_time-min_time) as "totaltime"
143163 from (
144164 select
165+ session_id,
166+ visit_id,
167+ coalesce(nullIf(argMin(name, tuple(if(name != '', 0, 1), created_at, event_id)), ''), 'direct') as name,
168+ count(*) c,
169+ min(created_at) min_time,
170+ max(created_at) max_time
171+ from (
172+ select
145173 case when multiSearchAny(lower(utm_medium), ['cp', 'ppc', 'retargeting', 'paid']) != 0 then 'paid' else 'organic' end prefix,
146174 case
147175 when referrer_domain = '' and url_query = '' then 'direct'
@@ -173,18 +201,17 @@ async function clickhouseQuery(
173201 else '' end AS "name",
174202 session_id,
175203 visit_id,
176- count(*) c,
177- min(created_at) min_time,
178- max(created_at) max_time
179- from website_event
180- ${ cohortQuery }
181- ${ excludeBounceQuery }
182- where website_id = {websiteId:UUID}
183- and created_at between {startDate:DateTime64} and {endDate:DateTime64}
184- and event_type NOT IN (2, 5)
185- and name != ''
186- ${ filterQuery }
187- group by prefix, name, session_id, visit_id
204+ event_id,
205+ created_at
206+ from website_event
207+ ${ cohortQuery }
208+ ${ excludeBounceQuery }
209+ where website_id = {websiteId:UUID}
210+ and created_at between {startDate:DateTime64} and {endDate:DateTime64}
211+ and event_type NOT IN (2, 5)
212+ ${ filterQuery }
213+ )
214+ group by session_id, visit_id
188215 ) as t
189216 group by name
190217 order by visitors desc, visits desc;
0 commit comments