次のテーブルがあるシステムを構築しています。
- 歌
- ブロードキャスト
- 駅
- 従う
- ユーザー
ユーザーは、放送を通じて曲が放送されているステーションをフォローします。
私は、ユーザーがフォローしているステーションに基づいて、ユーザー向けの曲の「フィード」を作成しています。
クエリは次のとおりです。
SELECT DISTINCT ON ("broadcasts"."created_at", "songs"."id") songs.*
FROM "songs"
INNER JOIN "broadcasts" ON "songs"."shared_id" = "broadcasts"."song_id"
INNER JOIN "stations" ON "broadcasts"."station_id" = "stations"."id"
INNER JOIN "follows" ON "stations"."id" = "follows"."station_id"
WHERE "follows"."user_id" = 2
ORDER BY broadcasts.created_at desc
LIMIT 18
注:shared_idはidと同じです。
ご覧のとおり、重複した結果が得られていますが、これは望ましくありません。以前の質問から、これはbroadcasts.created_atで個別に選択したことが原因であることがわかりました。
私の質問は次のとおりです。このクエリを変更して、IDに基づいて一意の曲のみを返し、broadcasts.created_atで並べ替えるにはどうすればよいですか。