fix mysql retention query

This commit is contained in:
Francis Cao 2023-08-15 12:15:27 -07:00
parent a16b0cef3a
commit 495b7f1f20
2 changed files with 21 additions and 6 deletions

View File

@ -43,7 +43,19 @@ function getDayDiffQuery(field1: string, field2: string): string {
} }
if (db === MYSQL) { if (db === MYSQL) {
return `DATEDIFF(${field1}, ${field2});`; return `DATEDIFF(${field1}, ${field2})`;
}
}
function getCastColumnQuery(field: string, type: string): string {
const db = getDatabaseType(process.env.DATABASE_URL);
if (db === POSTGRESQL) {
return `${field}::${type}`;
}
if (db === MYSQL) {
return `${field}`;
} }
} }
@ -206,6 +218,7 @@ export default {
...prisma, ...prisma,
getAddMinutesQuery, getAddMinutesQuery,
getDayDiffQuery, getDayDiffQuery,
getCastColumnQuery,
getDateQuery, getDateQuery,
getTimestampIntervalQuery, getTimestampIntervalQuery,
getFilterQuery, getFilterQuery,

View File

@ -33,7 +33,7 @@ async function relationalQuery(
}[] }[]
> { > {
const { startDate, endDate } = dateRange; const { startDate, endDate } = dateRange;
const { getDateQuery, getDayDiffQuery, rawQuery } = prisma; const { getDateQuery, getDayDiffQuery, getCastColumnQuery, rawQuery } = prisma;
const timezone = 'utc'; const timezone = 'utc';
const unit = 'day'; const unit = 'day';
@ -49,10 +49,10 @@ async function relationalQuery(
user_activities AS ( user_activities AS (
select distinct select distinct
w.session_id, w.session_id,
(${getDayDiffQuery( ${getDayDiffQuery(
getDateQuery('created_at', unit, timezone), getDateQuery('created_at', unit, timezone),
'c.cohort_date', 'c.cohort_date',
)}) as day_number )} as day_number
from website_event w from website_event w
join cohort_items c join cohort_items c
on w.session_id = c.session_id on w.session_id = c.session_id
@ -81,7 +81,7 @@ async function relationalQuery(
c.day_number as day, c.day_number as day,
s.visitors, s.visitors,
c.visitors as "returnVisitors", c.visitors as "returnVisitors",
c.visitors::float * 100 / s.visitors as percentage ${getCastColumnQuery('c.visitors', 'float')} * 100 / s.visitors as percentage
from cohort_date c from cohort_date c
join cohort_size s join cohort_size s
on c.cohort_date = s.cohort_date on c.cohort_date = s.cohort_date
@ -92,7 +92,9 @@ async function relationalQuery(
startDate, startDate,
endDate, endDate,
}, },
); ).then(results => {
return results.map(i => ({ ...i, percentage: Number(i.percentage) || 0 }));
});
} }
async function clickhouseQuery( async function clickhouseQuery(