Я пытаюсь сделать некоторые аналитики активности пользователей, в частности, сколько пользователей по-прежнему активны или, по крайней мере, регистрируются в течение определенного периода времени. Однако у меня есть некоторые конфликтующие числа с первым месяцем, который должен быть просто количеством пользователей, которые подписались в течение месяца. Чтобы понять это, мой простой запрос - это.Подсчет различий в случае-
SELECT count(user_id)
FROM users
WHERE date_part('year', member_since) = 2013
AND date_part('month', member_since) = 01
Гипотетически это возвращает «1000», который, как я считаю, является правильным из-за простоты. Но если я это сделаю ...
SELECT
COUNT(CASE WHEN date_part('day', last_login - member_since) >= 0
THEN user_id END) days_0
FROM users
WHERE date_part('year', member_since) = 2013
AND date_part('month', member_since) = 01
... Он вернет число менее 1000 человек. Теоретически это должно возвращать то же число, что и выше, потому что даже если last_login - это тот же день, что и member_since, который будет равен нулю и должен считать этих пользователей. И member_since, и last_login являются типами временных меток. У меня есть догадка, что разница может быть пользователями, где last_login является тем же самым, что и member_since, что означает, что они подписались и никогда не возвращались, но я не уверен, как бы это проверить. Является ли это проблемой NULL? Если да, как я могу включить это, чтобы вернуться к счету «1000»?
попробовать этот запрос '* Выберите из пользователей, где last_login является нулевым или member_since равна нулю или date_part ('день', last_login - member_since) <0' –
является он возвращает что-то, чем у вас есть несколько несогласованных строк –