From 9d49eaebacee2fe2ab080a70f467e5d7f4f27cbc Mon Sep 17 00:00:00 2001 From: Francis Cao Date: Wed, 24 Sep 2025 10:06:34 -0700 Subject: [PATCH] fix cohort query for retention report, add filters to weekly traffic route --- .../[websiteId]/sessions/weekly/route.ts | 3 ++- src/queries/sql/reports/getRetention.ts | 25 +++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/app/api/websites/[websiteId]/sessions/weekly/route.ts b/src/app/api/websites/[websiteId]/sessions/weekly/route.ts index 395b4555..50a9f926 100644 --- a/src/app/api/websites/[websiteId]/sessions/weekly/route.ts +++ b/src/app/api/websites/[websiteId]/sessions/weekly/route.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { unauthorized, json } from '@/lib/response'; import { canViewWebsite } from '@/permissions'; -import { pagingParams, timezoneParam } from '@/lib/schema'; +import { filterParams, pagingParams, timezoneParam } from '@/lib/schema'; import { getWeeklyTraffic } from '@/queries'; export async function GET( @@ -13,6 +13,7 @@ export async function GET( startAt: z.coerce.number().int(), endAt: z.coerce.number().int(), timezone: timezoneParam, + ...filterParams, ...pagingParams, }); diff --git a/src/queries/sql/reports/getRetention.ts b/src/queries/sql/reports/getRetention.ts index 67c373f8..15984cd3 100644 --- a/src/queries/sql/reports/getRetention.ts +++ b/src/queries/sql/reports/getRetention.ts @@ -46,11 +46,16 @@ async function relationalQuery( return rawQuery( ` WITH cohort_items AS ( - select session_id, - ${getDateSQL('created_at', unit)} as cohort_date - from session - where website_id = {{websiteId::uuid}} - and created_at between {{startDate}} and {{endDate}} + select + min(${getDateSQL('website_event.created_at', unit, timezone)}) as cohort_date, + website_event.session_id + from website_event + ${cohortQuery} + ${joinSessionQuery} + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + ${filterQuery} + group by website_event.session_id ), user_activities AS ( select distinct @@ -59,11 +64,9 @@ async function relationalQuery( from website_event join cohort_items on website_event.session_id = cohort_items.session_id - ${cohortQuery} - ${joinSessionQuery} where website_id = {{websiteId::uuid}} and created_at between {{startDate}} and {{endDate}} - ${filterQuery} + ), cohort_size as ( select cohort_date, @@ -121,8 +124,10 @@ async function clickhouseQuery( min(${getDateSQL('created_at', unit, timezone)}) as cohort_date, session_id from website_event + ${cohortQuery} where website_id = {websiteId:UUID} - and created_at between {startDate:DateTime64} and {endDate:DateTime64} + and created_at between {startDate:DateTime64} and {endDate:DateTime64} + ${filterQuery} group by session_id ), user_activities AS ( @@ -132,10 +137,8 @@ async function clickhouseQuery( from website_event join cohort_items on website_event.session_id = cohort_items.session_id - ${cohortQuery} where website_id = {websiteId:UUID} and created_at between {startDate:DateTime64} and {endDate:DateTime64} - ${filterQuery} ), cohort_size as ( select cohort_date,