Я пытаюсь распечатать список всех действий для случайной группы из 500 пользователей, которые начали использовать мое приложение после 1 января.
with random_users as (select distinct id, min(timestamp) as first_event
from log
group by id
having first_event >= '2019-01-01'
order by random()
limit 500)
select random_users.id, log.timestamp, log.event
from random_users left join log on log.id = random_users.id
Получить произвольный выбор пользователей легко, используяPostgreSQL random()
, но когда я пытаюсь объединить это с условием having first_event >= '2019-01-01'
, у меня возникают некоторые проблемы.А именно, timestamp
фактически показывает, как и раньше, 2019-01-01
для многих пользователей в конечных результатах, что-то вроде этого:
id timestamp event
5 2018-11-12 click
2 2018-12-27 purchase
7 2019-01-03 click
Мне интересно, это как-то связано с тем, как random()
Функция работает, так как похожие запросы без этого дают ожидаемые результаты. Как можно успешно ограничить функцию random()
группами пользователей, которые использовали приложение после 2019-01-01
?