Я выполнял запрос в формате ниже
SELECT b.date as Date,COUNT(DISTINCT user_id) AS NewUsers FROM (
SELECT user_id,MIN(date) as min_date
FROM tableA
WHERE date >= '2018-10-10'
AND filter1 = "XYZ"
GROUP BY ) a
CROSS JOIN (
SELECT date FROM tableB
WHERE date >= '2018-10-19' AND date <= CURRENT_DATE()
GROUP BY 1) b
WHERE a.date >= DATE_SUB(b.date, INTERVAL 6 DAY) AND a.date <= b.date
GROUP BY 1
Допустим, это результат1.
SELECT b.date as Date,COUNT(DISTINCT user_id) AS NewUsers FROM (
SELECT user_id,MIN(date) as min_date
FROM tableA
WHERE date >= '2018-07-10'
AND filter1 = "XYZ"
GROUP BY ) a
CROSS JOIN (
SELECT date FROM tableB
WHERE date >= '2018-07-19' AND date <= CURRENT_DATE()
GROUP BY 1) b
WHERE a.date >= DATE_SUB(b.date, INTERVAL 6 DAY) AND a.date <= b.date
GROUP BY 1
Выше результат2
Здесь 2018-07-19 - дата запуска.
Поскольку у меня есть данные до 2018-10-19, я хочу запустить запрос с более поздней даты, чтобы оптимизировать стоимость и потребление данных запросом .... но каким-то образом я получаю неверные данные.
Но если я запустил тот же запрос с даты запуска, я получаю правильные результаты.
Я имею в виду, что NewUsers from result1
для соответствующих дат (например, date> = 2018-10-19) больше, чем NewUsers from result2
.
Не уверен, где я что-то упускаю.
Любая помощь будет принята с благодарностью.
Спасибо
Я думаю - это из-за использования «MIN (дата)» - вы видите сдвиг в подсчетах, потому что вы ограничили даты, поэтому те пользователи, которые впервые были замечены в более ранние даты - теперь те же самые «старые» пользователи считаются за последние дни - таким образом путаница