PostgreSQL 9.1 (ホスティング プラットフォームがアップグレードされるとすぐに 9.2) を使用して、次のクエリを実行します。
SELECT
media_files.album,
media_files.artist,
ARRAY_AGG (media_files. ID) AS media_file_ids
FROM
media_files
INNER JOIN playlist_media_files ON media_files.id = playlist_media_files.media_file_id
WHERE
playlist_media_files.playlist_id = 1
GROUP BY
media_files.album,
media_files.artist
ORDER BY
media_files.album ASC
目標は、アルバム/アーティストの組み合わせを抽出し、結果セットにその特定の組み合わせのメディア ファイル ID の配列を含めることでした。
問題は、メディア ファイルに別の列があることですartwork
。
artwork
は (同じアルバム内であっても) メディア ファイルごとに一意ですが、結果セットではセットの最初のものだけを返す必要があります。
したがって、10 個のメディア ファイルを含むアルバムの場合、対応するアートワークも 10 個ありますが、最初のもの (またはそのコレクション用にランダムに選択されたもの) だけを返したいと思います。
SQL/ウィンドウ関数 (first_value over..) だけでそれを行うことは可能ですか?