期間内の初投稿ユーザー

こんにちは。SQL初心者です。指定された期間内に初めて投稿したユーザー名のリストを取得したいと考えています。

これは「参加」ではなく「投稿」が初めてである点が重要です。私たちのユースケースは一般的なものとは異なるため、投稿が重要になります。

そのようなクエリをお持ちの方はいらっしゃいますか?ご協力をいただければ幸いです!

ありがとうございます!

「いいね!」 1

これで問題解決するはずです、@ThunderThighsData 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
「いいね!」 13

これは非常に役立ちます。では、これらの投稿を実際に取得するにはどうすればよいでしょうか?

このようなもので要件を満たすでしょうか?

-- [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
「いいね!」 5

完璧です。ありがとうございます。

少し SQL の初心者向けの質問をしてもよろしいでしょうか?2 行目と 3 行目の uus はどのような役割を果たしているのでしょうか?AS のような機能で、users を接頭辞 uuser_stats を接頭辞 us として参照できるようになっているのでしょうか?

「いいね!」 2

問題ありません!

その通りです。uus はテーブルエイリアスです。詳しくはこちらをご覧ください: http://www.postgresqltutorial.com/postgresql-alias/

これは本質的に省略記法です。user_stats テーブルの user_id 列を指す際に、user_stats.user_id の代わりに us.user_id と書けるようにします。特にテーブル名が長い場合や、クエリが複雑な場合に役立ちます。

「いいね!」 7