Привет! Я новичок в SQL. Хотел бы получить список пользователей, которые впервые опубликовали сообщение в определённый период времени.
Обратите внимание: речь идёт о первой публикации, а не о регистрации. Наш случай использования отличается от большинства, поэтому важно именно первое сообщение.
У кого-нибудь есть что-то подобное? Буду благодарен за любую помощь!
Это должно сработать, @ThunderThighs. Добавьте это в свой Data Explorer, укажите дату начала и дату окончания — и вы готовы к работе. Даты должны соответствовать одному из поддерживаемых форматов, например YYYY-MM-DD.
Пользователи, сделавшие первый пост в указанный период
-- [params]
-- date :start_date
-- date :end_date
SELECT username
FROM users u
JOIN user_stats us
ON u.id = us.user_id
WHERE us.first_post_created_at BETWEEN :start_date::date AND :end_date::date
-- [params]
-- date :start_date
-- date :end_date
SELECT u.id AS user_id, p.id AS post_id, p.created_at
FROM users u
JOIN user_stats us
ON u.id = us.user_id
JOIN posts p
ON u.id = p.user_id
WHERE p.created_at = us.first_post_created_at
AND us.first_post_created_at BETWEEN :start_date::date AND :end_date::date
Могу я задать вопрос новичка в SQL? Что делают u и us во второй и третьей строках? Они работают примерно как AS, так что теперь users можно обозначать префиксом u, а user_stats — префиксом us?
По сути, это сокращение. Оно позволяет использовать us.user_id вместо user_stats.user_id для обращения к столбцу user_id в таблице user_stats. Это особенно полезно при работе с длинными именами таблиц и сложными запросами.